katello 3.18.5 → 4.0.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 (239) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/katello/katello.scss +72 -0
  3. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +6 -4
  4. data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +0 -19
  5. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -3
  6. data/app/controllers/katello/api/v2/content_credentials_controller.rb +24 -24
  7. data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +1 -1
  8. data/app/controllers/katello/api/v2/content_exports_controller.rb +4 -0
  9. data/app/controllers/katello/api/v2/content_views_controller.rb +2 -2
  10. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +2 -3
  11. data/app/controllers/katello/api/v2/repositories_controller.rb +3 -19
  12. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +34 -0
  13. data/app/controllers/katello/api/v2/subscriptions_controller.rb +1 -1
  14. data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +8 -4
  15. data/app/controllers/katello/concerns/api/v2/authorization.rb +1 -14
  16. data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +1 -1
  17. data/app/helpers/katello/sync_management_helper.rb +0 -2
  18. data/app/lib/actions/candlepin/environment/create.rb +1 -1
  19. data/app/lib/actions/candlepin/environment/set_content.rb +1 -1
  20. data/app/lib/actions/katello/activation_key/create.rb +9 -11
  21. data/app/lib/actions/katello/capsule_content/sync.rb +8 -8
  22. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +9 -0
  23. data/app/lib/actions/katello/check_matching_content.rb +17 -0
  24. data/app/lib/actions/katello/content_view/environment_create.rb +6 -8
  25. data/app/lib/actions/katello/content_view/publish.rb +1 -1
  26. data/app/lib/actions/katello/content_view_version/incremental_update.rb +11 -7
  27. data/app/lib/actions/katello/host/hypervisors_update.rb +4 -4
  28. data/app/lib/actions/katello/organization/create.rb +3 -5
  29. data/app/lib/actions/katello/organization/destroy.rb +1 -1
  30. data/app/lib/actions/katello/organization/manifest_delete.rb +3 -5
  31. data/app/lib/actions/katello/organization/manifest_import.rb +1 -1
  32. data/app/lib/actions/katello/organization/manifest_refresh.rb +1 -1
  33. data/app/lib/actions/katello/orphan_cleanup/remove_orphans.rb +1 -1
  34. data/app/lib/actions/katello/repository/check_matching_content.rb +3 -1
  35. data/app/lib/actions/katello/repository/clone_contents.rb +8 -11
  36. data/app/lib/actions/katello/repository/create.rb +0 -8
  37. data/app/lib/actions/katello/repository/filtered_index_content.rb +3 -0
  38. data/app/lib/actions/katello/repository/index_content.rb +1 -0
  39. data/app/lib/actions/katello/repository/multi_clone_contents.rb +9 -12
  40. data/app/lib/actions/katello/repository/sync.rb +1 -5
  41. data/app/lib/actions/katello/repository/update.rb +0 -8
  42. data/app/lib/actions/middleware/execute_if_contents_changed.rb +4 -1
  43. data/app/lib/actions/pulp/orchestration/repository/refresh_repos.rb +0 -6
  44. data/app/lib/actions/pulp3/capsule_content/refresh_distribution.rb +3 -3
  45. data/app/lib/actions/pulp3/content_guard/refresh_all_distributions.rb +1 -2
  46. data/app/lib/actions/pulp3/content_migration_presenter.rb +2 -5
  47. data/app/lib/actions/pulp3/orchestration/repository/refresh_repos.rb +1 -6
  48. data/app/lib/katello/concerns/base_template_scope_extensions.rb +8 -0
  49. data/app/lib/katello/errors.rb +1 -1
  50. data/app/lib/katello/event_daemon/monitor.rb +53 -0
  51. data/app/lib/katello/event_daemon/runner.rb +99 -0
  52. data/app/lib/katello/logging.rb +32 -0
  53. data/app/lib/katello/messaging/connection.rb +1 -7
  54. data/app/lib/katello/util/pulpcore_content_filters.rb +1 -1
  55. data/app/lib/katello/validators/content_view_puppet_module_validator.rb +1 -1
  56. data/app/models/katello/activation_key.rb +2 -2
  57. data/app/models/katello/candlepin/repository_mapper.rb +1 -1
  58. data/app/models/katello/concerns/hostgroup_extensions.rb +2 -4
  59. data/app/models/katello/concerns/organization_extensions.rb +2 -2
  60. data/app/models/katello/concerns/pulp_database_unit.rb +0 -12
  61. data/app/models/katello/concerns/redhat_extensions.rb +8 -9
  62. data/app/models/katello/concerns/smart_proxy_extensions.rb +24 -0
  63. data/app/models/katello/content_view.rb +5 -1
  64. data/app/models/katello/content_view_environment.rb +2 -2
  65. data/app/models/katello/content_view_puppet_environment.rb +2 -2
  66. data/app/models/katello/content_view_version.rb +2 -1
  67. data/app/models/katello/content_view_version_export_history.rb +20 -0
  68. data/app/models/katello/erratum.rb +3 -1
  69. data/app/models/katello/file_unit.rb +0 -4
  70. data/app/models/katello/glue/candlepin/pool.rb +2 -0
  71. data/app/models/katello/glue/pulp/repo.rb +0 -6
  72. data/app/models/katello/glue/pulp/repos.rb +1 -22
  73. data/app/models/katello/host/content_facet.rb +31 -9
  74. data/app/models/katello/ping.rb +19 -39
  75. data/app/models/katello/pool.rb +5 -0
  76. data/app/models/katello/product.rb +3 -3
  77. data/app/models/katello/repository.rb +3 -3
  78. data/app/presenters/katello/host_subscription_presenter.rb +3 -4
  79. data/app/presenters/katello/host_subscriptions_presenter.rb +24 -0
  80. data/app/services/katello/applicability/applicable_content_helper.rb +6 -8
  81. data/app/services/katello/candlepin_event_listener.rb +11 -19
  82. data/app/services/katello/event_monitor/poller_thread.rb +2 -11
  83. data/app/services/katello/pulp/repository.rb +2 -4
  84. data/app/services/katello/pulp/smart_proxy_repository.rb +0 -15
  85. data/app/services/katello/pulp3/api/core.rb +0 -14
  86. data/app/services/katello/pulp3/erratum.rb +1 -2
  87. data/app/services/katello/pulp3/migration.rb +9 -83
  88. data/app/services/katello/pulp3/migration_plan.rb +5 -54
  89. data/app/services/katello/pulp3/migration_switchover.rb +5 -36
  90. data/app/services/katello/pulp3/repository/apt.rb +2 -1
  91. data/app/services/katello/pulp3/repository/yum.rb +2 -11
  92. data/app/services/katello/pulp3/repository.rb +13 -34
  93. data/app/services/katello/pulp3/rpm.rb +1 -5
  94. data/app/services/katello/pulp3/task.rb +5 -8
  95. data/app/services/katello/pulp3/task_group.rb +5 -13
  96. data/app/services/katello/repository_type.rb +1 -1
  97. data/app/views/foreman/smart_proxies/_content_tab.html.erb +4 -47
  98. data/app/views/foreman/smart_proxies/show.html.erb +1 -1
  99. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +22 -25
  100. data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +1 -0
  101. data/app/views/katello/api/v2/organizations/show.json.rabl +7 -9
  102. data/app/views/katello/sync_management/_products.html.erb +1 -1
  103. data/app/views/overrides/organizations/_edit_override.html.erb +1 -4
  104. data/app/views/overrides/smart_proxies/_environment_tab.html.erb +1 -1
  105. data/app/views/overrides/smart_proxies/_environment_tab_pane.html.erb +1 -1
  106. data/config/katello.yaml.example +0 -3
  107. data/config/routes/api/v2.rb +8 -10
  108. data/db/migrate/20191204214919_add_content_view_version_counts.rb +0 -1
  109. data/db/migrate/20200514092553_move_katello_fields_from_hostgroups.katello.rb +1 -1
  110. data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +56 -0
  111. data/db/migrate/20210128231228_add_type_and_from_cvv_to_cvv_export_history.rb +14 -0
  112. data/db/migrate/20210201163238_migrate_background_download_policy_to_migrate.rb +7 -0
  113. data/db/seeds.d/104-proxy.rb +1 -1
  114. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  115. data/engines/bastion/app/assets/javascripts/bastion/auth/authorization.service.js +1 -1
  116. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +1 -1
  117. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-register-os-client.directive.js +17 -0
  118. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -2
  119. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
  120. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-client.html +11 -4
  121. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-deb-client.html +38 -0
  122. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-oracle-client.html +5 -0
  123. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-sles-client.html +28 -0
  124. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register.html +14 -11
  125. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +2 -2
  126. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +2 -2
  127. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +1 -1
  128. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/download-policy.service.js +0 -1
  129. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +1 -1
  130. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +2 -2
  131. data/lib/katello/engine.rb +4 -5
  132. data/lib/katello/middleware/event_daemon.rb +1 -1
  133. data/lib/katello/permission_creator.rb +3 -2
  134. data/lib/katello/plugin.rb +2 -2
  135. data/lib/katello/tasks/jenkins.rake +1 -1
  136. data/lib/katello/tasks/pulp3_content_switchover.rake +20 -31
  137. data/lib/katello/tasks/pulp3_migration.rake +25 -45
  138. data/lib/katello/tasks/pulp3_migration_abort.rake +0 -8
  139. data/lib/katello/tasks/pulp3_migration_stats.rake +3 -46
  140. data/lib/katello/tasks/upgrades/4.0/remove_ostree_puppet_content.rake +16 -0
  141. data/lib/katello/version.rb +1 -1
  142. data/lib/proxy_api/container_gateway.rb +21 -0
  143. data/locale/bn/katello.edit.po +0 -0
  144. data/locale/cs/katello.edit.po +0 -0
  145. data/locale/de/katello.edit.po +0 -0
  146. data/locale/en/katello.edit.po +0 -0
  147. data/locale/es/katello.edit.po +0 -0
  148. data/locale/fr/katello.edit.po +0 -0
  149. data/locale/gu/katello.edit.po +0 -0
  150. data/locale/hi/katello.edit.po +0 -0
  151. data/locale/it/katello.edit.po +0 -0
  152. data/locale/ja/katello.edit.po +0 -0
  153. data/locale/kn/katello.edit.po +0 -0
  154. data/locale/ko/katello.edit.po +0 -0
  155. data/locale/mr/katello.edit.po +0 -0
  156. data/locale/or/katello.edit.po +0 -0
  157. data/locale/pa/katello.edit.po +0 -0
  158. data/locale/pt/katello.edit.po +0 -0
  159. data/locale/pt_BR/katello.edit.po +0 -0
  160. data/locale/ru/katello.edit.po +0 -0
  161. data/locale/ta/katello.edit.po +0 -0
  162. data/locale/te/katello.edit.po +0 -0
  163. data/locale/zh_CN/katello.edit.po +0 -0
  164. data/locale/zh_TW/katello.edit.po +0 -0
  165. data/package.json +1 -1
  166. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +0 -1
  167. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +2 -0
  168. data/webpack/__mocks__/foremanReact/components/common/dates/LongDateTime.js +5 -0
  169. data/webpack/{scenes/ContentViews/Details/Repositories → components/SelectableDropdown}/SelectableDropdown.js +20 -3
  170. data/webpack/components/SelectableDropdown/__tests__/SelectableDropdown.test.js +45 -0
  171. data/webpack/components/SelectableDropdown/index.js +3 -0
  172. data/webpack/components/Table/TableWrapper.js +2 -1
  173. data/webpack/components/Table/helpers.js +14 -0
  174. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +0 -1
  175. data/webpack/containers/Application/overrides.scss +6 -0
  176. data/webpack/index.js +6 -0
  177. data/webpack/redux/actions/RedHatRepositories/helpers.js +5 -5
  178. data/webpack/scenes/ContentViews/ContentViewsActions.js +31 -2
  179. data/webpack/scenes/ContentViews/ContentViewsConstants.js +5 -1
  180. data/webpack/scenes/ContentViews/Copy/ContentViewCopySelectors.js +16 -0
  181. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +77 -0
  182. data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +44 -0
  183. data/webpack/scenes/ContentViews/Copy/__tests__/contentViewCopyResult.fixtures.json +42 -0
  184. data/webpack/scenes/ContentViews/Copy/__tests__/copyContentView.test.js +39 -0
  185. data/webpack/scenes/ContentViews/Copy/index.js +4 -0
  186. data/webpack/scenes/ContentViews/Create/ContentViewCreateSelectors.js +16 -0
  187. data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +58 -0
  188. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +175 -0
  189. data/webpack/scenes/ContentViews/Create/CreateContentViewModal.js +27 -0
  190. data/webpack/scenes/ContentViews/Create/__tests__/contentViewCreateResult.fixtures.json +42 -0
  191. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +92 -0
  192. data/webpack/scenes/ContentViews/Create/index.js +4 -0
  193. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +16 -0
  194. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +20 -1
  195. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +17 -7
  196. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +19 -13
  197. data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +40 -0
  198. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +124 -0
  199. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.fixtures.json +134 -0
  200. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +92 -0
  201. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +44 -25
  202. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js +17 -7
  203. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +24 -0
  204. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +53 -3
  205. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +4 -3
  206. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +41 -0
  207. data/webpack/scenes/ContentViews/helpers.js +13 -0
  208. data/webpack/scenes/SmartProxy/Content.js +17 -0
  209. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +11 -0
  210. data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +3 -0
  211. data/webpack/scenes/SmartProxy/SmartProxyContentSelectors.js +16 -0
  212. data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +152 -0
  213. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentResult.fixtures.json +140 -0
  214. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +38 -0
  215. data/webpack/scenes/SmartProxy/index.js +4 -0
  216. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +2 -7
  217. data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +3 -3
  218. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +2 -2
  219. data/webpack/scenes/Subscriptions/Manifest/__tests__/SimpleContentAccess.test.js +2 -2
  220. data/webpack/scenes/Subscriptions/Manifest/index.js +0 -1
  221. data/webpack/test-utils/react-testing-lib-wrapper.js +5 -2
  222. data/webpack/utils/helpers.js +3 -0
  223. metadata +103 -63
  224. data/app/controllers/katello/api/v2/gpg_keys_controller.rb +0 -114
  225. data/app/lib/actions/pulp3/content_migration_reset.rb +0 -22
  226. data/app/lib/katello/util/hostgroup_facets_helper.rb +0 -126
  227. data/app/overrides/disable_turbolinks_on_proxies_index.rb +0 -5
  228. data/app/services/katello/event_daemon.rb +0 -135
  229. data/app/services/katello/pulp/content_counts_calculator.rb +0 -60
  230. data/db/migrate/20210201165835_add_migration_missing_content.rb +0 -12
  231. data/db/migrate/20210420140050_add_pulp3_hrefs_to_content_types_deb.rb +0 -5
  232. data/lib/katello/tasks/check_config.rake +0 -11
  233. data/lib/katello/tasks/fix_hostgroup_facets.rake +0 -8
  234. data/lib/katello/tasks/pulp3_migration_approve_corrupted.rake +0 -21
  235. data/lib/katello/tasks/pulp3_migration_reset.rake +0 -26
  236. data/lib/katello/tasks/reports.rake +0 -7
  237. data/lib/katello/tasks/upgrades/3.10/update_gpg_key_urls.rake +0 -32
  238. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.scss +0 -5
  239. data/webpack/scenes/ContentViews/Table/actionResolver.js +0 -28
@@ -0,0 +1,38 @@
1
+ <div ng-controller="ContentHostRegisterController">
2
+ <li ng-hide="noCapsulesFound">
3
+ <p translate>Select a Content Source:</p>
4
+ <p><select ng-model="selectedCapsule" ng-options="capsule.name for capsule in capsules.results"></select></p>
5
+ </li>
6
+
7
+ <li>
8
+ <p>Add the GPG public key used to sign DEB packages from your system to download the Debian/Ubuntu client from your system:</p>
9
+
10
+ <pre><code>apt-get -y install gnupg
11
+ mkdir -p /etc/apt/trusted.gpg.d
12
+ wget "https://{{ noCapsulesFound ? katelloHostname : hostname(selectedCapsule.url) }}/pub/pulp_deb_signing.key" -O - | apt-key add -</code></pre>
13
+ </li>
14
+
15
+ <li>
16
+ Create a new repository file which contains the Debian/Ubuntu client. This example chooses Ubuntu 20.04:
17
+
18
+ <pre><code>mkdir -p /etc/apt/sources.list.d
19
+ cat &lt /etc/apt/sources.list &lt&lt'EOF'
20
+ deb http://{{ noCapsulesFound ? katelloHostname : hostname(selectedCapsule.url) }}/pulp/deb/{{ organization.label }}/Library/custom/Ubuntu_Client/Ubuntu_Client_20_04/ default all
21
+ EOF</code></pre>
22
+ <p>Here Ubuntu_Client is a product name, Ubuntu_Client_20_04 is the repository inside the product, and Library is a lifecycle environment.</p>
23
+ </li>
24
+ <li>
25
+ Install apt-transport-katello and katello-upload-profile. This depends on and automatically installs the subscription-manager for Debian/Ubuntu:
26
+
27
+ <pre><code>apt-get update && apt-get -y install apt-transport-katello katello-upload-profile</code></pre></li>
28
+ <li>
29
+ Download and execute a script from your system to install all necessary certificates:
30
+
31
+ <pre><code>wget --no-check-certificate -O katello-rhsm-consumer https://{{ noCapsulesFound ? katelloHostname : hostname(selectedCapsule.url) }}/pub/katello-rhsm-consumer
32
+ /bin/bash -x katello-rhsm-consumer 2&lt /root/katello-rhsm-consumer.log</code></pre></li>
33
+ <li>
34
+ Register your host with an appropriate activation key:
35
+
36
+ <pre><code>subscription-manager register --org="{{ organization.label }}" --name="&ltHost Name&gt" --activationkey="&ltActivation Key Name&gt"</code></pre>
37
+
38
+ </li></div>
@@ -0,0 +1,5 @@
1
+ <li>
2
+ <p translate>Install the Subscription Manager package:</p>
3
+ <pre><code>yum install -y subscription-manager</code></pre>
4
+ </li>
5
+ <register-client/>
@@ -0,0 +1,28 @@
1
+ <div ng-controller="ContentHostRegisterController"><li>
2
+ <p translate>Register using subscription-manager:</p>
3
+ <p translate>Using an Activation Key:</p>
4
+ <pre><code>subscription-manager register --org="{{ organization.label }}" --activationkey="&ltActivation Key Name&gt"</code></pre>
5
+ <p translate>Using a username and password:</p>
6
+ <pre><code>subscription-manager register --org="{{ organization.label }}" --environment="Library"</code></pre>
7
+ </li>
8
+ <li>
9
+ <p translate>Install client package:</p>
10
+
11
+ <p translate>To report package & errata information:</p>
12
+ <pre><code>zypper -y install katello-host-tools</code></pre>
13
+
14
+ <p translate>Tracer helps administrators identify applications that need to be restarted after a system is patched. To optionally report tracer information:</p>
15
+ <pre><code>zypper -y install katello-host-tools-tracer</code></pre>
16
+
17
+ <p translate>For remote actions via katello-agent:</p>
18
+ <pre><code>zypper -y install katello-agent</code></pre>
19
+ <section>
20
+ <p bst-alert="warning" >
21
+ <span translate>
22
+ Katello-agent is deprecated and will be removed in Katello 4.0. Consider migrating to Remote Execution.
23
+ </span>
24
+ </p>
25
+ </section>
26
+
27
+ <p translate>Learn more about these packages in the <a href="https://theforeman.org/plugins/katello/">Documentation</a> </p>
28
+ </li></div>
@@ -9,22 +9,25 @@
9
9
  <div data-block="content">
10
10
  <p translate>To register a content host to this server, follow these steps.</p>
11
11
  <ol>
12
- <li ng-hide="noCapsulesFound">
12
+ <li>
13
+ <p>Select an Operating System:</p>
14
+ <p><select ng-init="selectedUserOs = 'client'" ng-model="selectedUserOs">
15
+ <option value="client">CentOS/RHEL</option>
16
+ <option value="deb-client">Debian/Ubuntu</option>
17
+ <option value="oracle-client">OracleLinux</option>
18
+ <option value="sles-client">SLES/Suse</option>
19
+ </select></p>
20
+ </li>
21
+ <li ng-hide="noCapsulesFound || selectedUserOs == 'deb-client'">
13
22
  <p translate>Select a Content Source:</p>
14
23
  <p><select ng-model="selectedCapsule" ng-options="capsule.name for capsule in capsules.results"></select></p>
15
24
  </li>
16
- <li>
25
+ <li ng-hide="selectedUserOs === 'deb-client'">
17
26
  <p translate>Install the pre-built bootstrap RPM:</p>
18
- <pre><code>curl --insecure --output {{ consumerCertRPM }} https://{{ noCapsulesFound ? katelloHostname : hostname(selectedCapsule.url) }}/pub/{{ consumerCertRPM }}<br />yum localinstall {{ consumerCertRPM }} </code></pre>
27
+ <pre><code>curl --insecure --output {{ consumerCertRPM }} https://{{ noCapsulesFound ? katelloHostname : hostname(selectedCapsule.url) }}/pub/{{ consumerCertRPM }}<br />{{(selectedUserOs === 'sles-client') ? 'zypper' : 'yum' }} localinstall {{ consumerCertRPM }} </code></pre>
19
28
  </li>
20
- <li>
21
- <p translate>Register using subscription-manager:</p>
22
- <p translate>Using an Activation Key:</p>
23
- <pre><code>subscription-manager register --org="{{ organization.label }}" --activationkey="&ltActivation Key Name&gt"</code></pre>
24
- <p translate>Using a username and password:</p>
25
- <pre><code>subscription-manager register --org="{{ organization.label }}" --environment="Library"</code></pre>
26
- </li>
27
- <register-client />
29
+
30
+ <register-os-client user-os="selectedUserOs"></register-os-client>
28
31
  </ol>
29
32
  </div>
30
33
  </section>
@@ -59,7 +59,7 @@
59
59
  <td bst-table-cell>
60
60
  <div class="form-group">
61
61
  <input class="form-control"
62
- ng-hide="denied('edit_content_views', contentView)"
62
+ ng-hide="denied('view_content_views', contentView)"
63
63
  ng-model="rule.name"
64
64
  uib-typeahead="name for name in fetchAutocompleteName($viewValue)"
65
65
  ng-readonly="!rule.editMode"/>
@@ -179,4 +179,4 @@
179
179
  </tbody>
180
180
  </table>
181
181
  </div>
182
- </div>
182
+ </div>
@@ -91,8 +91,8 @@ angular.module('Bastion.repositories').controller('RepositoryDetailsInfoControll
91
91
  var deferred = $q.defer();
92
92
 
93
93
  if (!saveUpstreamAuth) {
94
- delete repository.upstream_username;
95
- delete repository.upstream_password;
94
+ repository['upstream_username'] = null;
95
+ repository['upstream_password'] = null;
96
96
  }
97
97
 
98
98
  if (!_.isEmpty(repository.commaTagsWhitelist)) {
@@ -156,7 +156,7 @@
156
156
  on-save="save(repository)">
157
157
  </dd>
158
158
  </span>
159
- <span ng-show="repository.content_type === 'yum' || repository.content_type === 'deb' || repository.content_type === 'puppet'">
159
+ <span ng-hide="repository.content_type === 'ostree' || repository.content_type === 'puppet'">
160
160
  <dt translate>Mirror on Sync</dt>
161
161
  <dd bst-edit-checkbox="repository.mirror_on_sync"
162
162
  formatter="booleanToYesNo"
@@ -12,7 +12,6 @@ angular.module('Bastion.repositories').service('DownloadPolicy',
12
12
 
13
13
  this.downloadPolicies = {
14
14
  'on_demand': translate('On Demand'),
15
- 'background': translate('Background (Deprecated)'),
16
15
  'immediate': translate('Immediate')
17
16
  };
18
17
 
@@ -221,7 +221,7 @@
221
221
  </p>
222
222
  </div>
223
223
 
224
- <div class="checkbox" ng-if="repository.content_type === 'yum' || repository.content_type === 'deb' || repository.content_type === 'puppet'">
224
+ <div class="checkbox" ng-hide="repository.content_type === 'ostree' || repository.content_type === 'puppet'">
225
225
  <label>
226
226
  <input id="mirror_on_sync" name="mirror_on_sync" ng-model="repository.mirror_on_sync" type="checkbox"/>
227
227
  <span translate>Mirror on Sync</span>
@@ -54,10 +54,10 @@ angular.module('Bastion.products').controller('ProductsController',
54
54
  nutupane = new Nutupane(Product, params, undefined, nutupaneParams);
55
55
  $scope.controllerName = 'katello_products';
56
56
  nutupane.primaryOnly = true;
57
- nutupane.refresh().then(function () {
57
+ $scope.table = nutupane.table;
58
+ nutupane.load().then(function () {
58
59
  $scope.disableRepoDiscovery = false;
59
60
  });
60
- $scope.table = nutupane.table;
61
61
 
62
62
  $scope.$on('productDelete', function (event, taskId) {
63
63
  var message = translate("Product delete operation has been initiated in the background.");
@@ -24,8 +24,6 @@ module Katello
24
24
 
25
25
  initializer 'katello.load_default_settings', :before => 'katello.register_plugin' do
26
26
  default_settings = {
27
- :use_pulp => true,
28
- :use_cp => true,
29
27
  :rest_client_timeout => 30,
30
28
  :gpg_strict_validation => false,
31
29
  :redhat_repository_url => 'https://cdn.redhat.com',
@@ -144,9 +142,9 @@ module Katello
144
142
  )
145
143
  end
146
144
 
147
- Katello::EventDaemon.initialize
148
- Katello::EventDaemon.register_service(:candlepin_events, Katello::CandlepinEventListener)
149
- Katello::EventDaemon.register_service(:katello_events, Katello::EventMonitor::PollerThread)
145
+ Katello::EventDaemon::Runner.initialize
146
+ Katello::EventDaemon::Runner.register_service(:candlepin_events, Katello::CandlepinEventListener)
147
+ Katello::EventDaemon::Runner.register_service(:katello_events, Katello::EventMonitor::PollerThread)
150
148
 
151
149
  FastGettext.add_text_domain('katello',
152
150
  :path => File.expand_path("../../../locale", __FILE__),
@@ -202,6 +200,7 @@ module Katello
202
200
  require "#{Katello::Engine.root}/app/services/katello/puppet_class_importer_extensions"
203
201
  require "#{Katello::Engine.root}/lib/proxy_api/pulp"
204
202
  require "#{Katello::Engine.root}/lib/proxy_api/pulp_node"
203
+ require "#{Katello::Engine.root}/lib/proxy_api/container_gateway"
205
204
 
206
205
  # We need to explicitly load this files because Foreman has
207
206
  # similar strucuture and if the Foreman files are loaded first,
@@ -6,7 +6,7 @@ module Katello
6
6
  end
7
7
 
8
8
  def call(env)
9
- Katello::EventDaemon.start
9
+ Katello::EventDaemon::Runner.start
10
10
  @app.call(env)
11
11
  end
12
12
  end
@@ -349,7 +349,7 @@ module Katello
349
349
  :finder_scope => :exportable
350
350
  end
351
351
 
352
- def subscription_permissions
352
+ def subscription_permissions # rubocop:disable Metrics/MethodLength
353
353
  @plugin.permission :view_subscriptions,
354
354
  {
355
355
  'katello/api/v2/subscriptions' => [:index, :show, :available, :manifest_history, :auto_complete_search]
@@ -377,7 +377,8 @@ module Katello
377
377
  :resource_type => 'Katello::Subscription'
378
378
  @plugin.permission :manage_subscription_allocations,
379
379
  {
380
- 'katello/api/v2/upstream_subscriptions' => [:index, :create, :destroy, :update, :ping, :enable_simple_content_access, :disable_simple_content_access, :simple_content_access_eligible]
380
+ 'katello/api/v2/upstream_subscriptions' => [:index, :create, :destroy, :update, :ping, :enable_simple_content_access, :disable_simple_content_access, :simple_content_access_eligible],
381
+ 'katello/api/v2/simple_content_access' => [:enable, :disable, :eligible]
381
382
  },
382
383
  :resource_type => 'Katello::Subscription'
383
384
  end
@@ -263,11 +263,11 @@ Foreman::Plugin.register :katello do
263
263
  context.add_pagelet :main_tabs,
264
264
  :name => _("Content"),
265
265
  :partial => "foreman/smart_proxies/content_tab",
266
- :onlyif => proc { |proxy| proxy.has_feature?(SmartProxy::PULP_NODE_FEATURE) }
266
+ :onlyif => proc { |proxy| proxy.has_feature?(SmartProxy::PULP_NODE_FEATURE) || proxy.has_feature?(SmartProxy::PULP3_FEATURE) }
267
267
  context.add_pagelet :details_content,
268
268
  :name => _("Content Sync"),
269
269
  :partial => "foreman/smart_proxies/content_sync",
270
- :onlyif => proc { |proxy| proxy.has_feature?(SmartProxy::PULP_NODE_FEATURE) }
270
+ :onlyif => proc { |proxy| proxy.pulp_mirror? }
271
271
  end
272
272
 
273
273
  ::Katello::HostStatusManager::STATUSES.each do |status_class|
@@ -19,6 +19,6 @@ begin
19
19
  Rake::Task['rake:test:katello:test'].invoke
20
20
  end
21
21
  end
22
- rescue LoadError # rubocop:disable Lint/SuppressedException
22
+ rescue LoadError
23
23
  # ci/reporter/rake/rspec not present, skipping this definition
24
24
  end
@@ -3,41 +3,30 @@ require "#{Katello::Engine.root}/app/services/katello/pulp3/migration_switchover
3
3
 
4
4
  namespace :katello do
5
5
  desc "Runs a Pulp 3 migration of pulp3 hrefs to pulp ids for supported content types."
6
- task :pulp3_content_switchover => ["dynflow:client", "check_config"] do
7
- dryrun = ENV['DRYRUN']
8
-
9
- if !SETTINGS[:katello][:use_pulp_2_for_content_type][:docker] &&
10
- !SETTINGS[:katello][:use_pulp_2_for_content_type][:file] &&
11
- !SETTINGS[:katello][:use_pulp_2_for_content_type][:yum] &&
12
- !SETTINGS[:katello][:use_pulp_2_for_content_type][:deb]
13
- puts "Switchover is already complete, skipping switchover task."
14
- else
15
- begin
16
- User.current = User.anonymous_admin
6
+ task :pulp3_content_switchover => ["dynflow:client"] do
7
+ begin
8
+ User.current = User.anonymous_admin
17
9
 
10
+ ActiveRecord::Base.transaction do
18
11
  switchover_service = Katello::Pulp3::MigrationSwitchover.new(SmartProxy.pulp_primary)
19
- switchover_service.remove_orphaned_content #run out of transaction for easier re-run
20
- ActiveRecord::Base.transaction do
21
- switchover_service.run
22
- fail "Dryrun completed without error, aborting and rolling back" if dryrun
23
- end
24
- rescue Katello::Pulp3::SwitchOverError => e
25
- $stderr.print(e.message)
26
- exit 1
12
+ switchover_service.run
27
13
  end
14
+ rescue Katello::Pulp3::SwitchOverError => e
15
+ $stderr.print(e.message)
16
+ exit 1
17
+ end
28
18
 
29
- task = ForemanTasks.async_task(Actions::Pulp3::ContentGuard::RefreshAllDistributions, SmartProxy.pulp_primary)
30
- until !task.pending? || task.paused?
31
- sleep(10)
32
- task = ForemanTasks::Task.find(task.id)
33
- end
34
- if task.result == 'error' || task.result == 'pending'
35
- msg _("Content Guard Configuration failed, switchover aborted. Switchover continuing, but after completion, you will want to investigate: https://#{Socket.gethostname}/foreman_tasks/tasks/#{task.id}")
36
- Rails.logger.error(msg)
37
- $stderr.print(msg)
38
- else
39
- puts _("Content Switchover completed successfully")
40
- end
19
+ task = ForemanTasks.sync_task(Actions::Pulp3::ContentGuard::RefreshAllDistributions, SmartProxy.pulp_primary)
20
+ until !task.pending? || task.paused?
21
+ sleep(10)
22
+ task = ForemanTasks::Task.find(task.id)
23
+ end
24
+ if task.result == 'error' || task.result == 'pending'
25
+ msg _("Content Guard Configuration failed, switchover aborted. Switchover continuing, but after completion, you will want to investigate: https://#{Socket.gethostname}/foreman_tasks/tasks/#{task.id}")
26
+ Rails.logger.error(msg)
27
+ $stderr.print(msg)
28
+ else
29
+ puts _("Content Switchover completed successfully")
41
30
  end
42
31
  end
43
32
  end
@@ -1,57 +1,37 @@
1
1
  namespace :katello do
2
2
  desc "Runs a Pulp 2 to 3 Content Migration for supported types. May be run multiple times. Use wait=false to immediately return with a task url."
3
- task :pulp3_migration => ["dynflow:client", 'check_config'] do
4
- if !SETTINGS[:katello][:use_pulp_2_for_content_type][:docker] &&
5
- !SETTINGS[:katello][:use_pulp_2_for_content_type][:file] &&
6
- !SETTINGS[:katello][:use_pulp_2_for_content_type][:yum] &&
7
- !SETTINGS[:katello][:use_pulp_2_for_content_type][:deb]
8
- puts "Switchover is already complete, skipping migration work."
9
- else
10
- services = [:candlepin, :foreman_tasks, :pulp3, :pulp, :pulp_auth]
11
- Katello::Ping.ping!(services: services)
12
-
13
- puts "Starting task."
14
- SmartProxy.pulp_primary.refresh
3
+ task :pulp3_migration => ["dynflow:client", "check_ping"] do
4
+ puts "Starting task."
5
+ SmartProxy.pulp_primary.refresh
15
6
 
16
- reimport_all = ::Foreman::Cast.to_bool(ENV['reimport_all'])
17
- wait = ::Foreman::Cast.to_bool(ENV['wait'] || 'true')
18
- preserve_output = ::Foreman::Cast.to_bool(ENV['preserve_output'])
7
+ reimport_all = ::Foreman::Cast.to_bool(ENV['reimport_all'])
8
+ wait = ::Foreman::Cast.to_bool(ENV['wait'] || 'true')
9
+ preserve_output = ::Foreman::Cast.to_bool(ENV['preserve_output'])
19
10
 
20
- User.current = User.anonymous_api_admin
21
- Katello::Pulp3::MigrationSwitchover.new(SmartProxy.pulp_primary).remove_orphaned_content
22
- task = ForemanTasks.async_task(Actions::Pulp3::ContentMigration, SmartProxy.pulp_primary, reimport_all: reimport_all)
11
+ task = ForemanTasks.async_task(Actions::Pulp3::ContentMigration, SmartProxy.pulp_primary, reimport_all: reimport_all)
23
12
 
24
- if wait
25
- clear_count = nil
26
- until !task.pending? || task.paused?
27
- $stdout.print("\r#{' ' * clear_count}\r") if clear_count && !preserve_output #clear the line before printing
28
- $stdout.print("\n") if preserve_output
29
- message = "#{Time.now.to_s}: #{task.humanized[:output]}"
30
- clear_count = message.length + 1
31
- $stdout.print(message)
32
- $stdout.flush
13
+ if wait
14
+ clear_count = nil
15
+ until !task.pending? || task.paused?
16
+ $stdout.print("\r#{' ' * clear_count}\r") if clear_count && !preserve_output #clear the line before printing
17
+ $stdout.print("\n") if preserve_output
18
+ message = "#{Time.now.to_s}: #{task.humanized[:output]}"
19
+ clear_count = message.length + 1
20
+ $stdout.print(message)
33
21
 
34
- sleep(10)
35
- task = ForemanTasks::Task.find(task.id)
36
- end
22
+ sleep(10)
23
+ task = ForemanTasks::Task.find(task.id)
24
+ end
37
25
 
38
- if task.result == 'warning' || task.result == 'pending'
39
- msg = _("Migration failed, You will want to investigate: https://#{Socket.gethostname}/foreman_tasks/tasks/#{task.id}\n")
40
- $stderr.print(msg)
41
- fail ForemanTasks::TaskError, task
42
- else
43
- puts
44
- Katello::Pulp3::Migration::CORRUPTABLE_CONTENT_TYPES.each do |type|
45
- if type.missing_migrated_content.any?
46
- puts "Some corrupted or missing content found, run 'foreman-maintain content migration-stats' for more information."
47
- exit(-1)
48
- end
49
- end
50
- puts _("Content Migration completed successfully")
51
- end
26
+ if task.result == 'warning' || task.result == 'pending'
27
+ msg = _("Migration failed, You will want to investigate: https://#{Socket.gethostname}/foreman_tasks/tasks/#{task.id}\n")
28
+ $stderr.print(msg)
29
+ fail ForemanTasks::TaskError, task
52
30
  else
53
- puts "Migration started, you may monitor it at: https://#{Socket.gethostname}/foreman_tasks/tasks/#{task.id}"
31
+ puts _("Content Migration completed successfully")
54
32
  end
33
+ else
34
+ puts "Migration started, you may monitor it at: https://#{Socket.gethostname}/foreman_tasks/tasks/#{task.id}"
55
35
  end
56
36
  end
57
37
  end
@@ -17,14 +17,6 @@ namespace :katello do
17
17
  cancelled_tasks_count += 1 if cancelled_task
18
18
  end
19
19
 
20
- api = Katello::Pulp3::Api::Core.new(SmartProxy.pulp_primary)
21
- %w(pulp_2to3_migration.app.tasks.migrate.migrate_from_pulp2 pulp_2to3_migration.app.migration.complex_repo_migration).each do |task_label|
22
- api.tasks_api.list(:state__in => 'running,waiting', :name => task_label).results.each do |task|
23
- api.cancel_task(task.pulp_href)
24
- cancelled_tasks_count += 1
25
- end
26
- end
27
-
28
20
  puts _("\e[33mCancelled #{cancelled_tasks_count} tasks.\e[0m")
29
21
  end
30
22
  end
@@ -10,8 +10,7 @@ namespace :katello do
10
10
  migratable_repo_count = ::Katello::Repository.count - ::Katello::Repository.puppet_type.count -
11
11
  ::Katello::Repository.ostree_type.count - ::Katello::Repository.deb_type.count
12
12
 
13
- on_demand_rpm_count = Katello::RepositoryRpm.where(:repository_id => Katello::Repository.yum_type.on_demand).
14
- select(:rpm_id).distinct.count
13
+ on_demand_rpm_count = Katello::RepositoryRpm.where(:repository_id => Katello::Repository.yum_type.on_demand).distinct.count
15
14
  on_demand_unmigrated_rpm_count = on_demand_rpm_count - migrated_rpm_count
16
15
  immediate_unmigrated_rpm_count = ::Katello::Rpm.count - migrated_rpm_count - on_demand_unmigrated_rpm_count
17
16
 
@@ -24,61 +23,19 @@ namespace :katello do
24
23
  hours = (migration_minutes / 60) % 60
25
24
  minutes = migration_minutes % 60
26
25
 
27
- puts "============Migration Summary================"
26
+ puts
28
27
  puts "Migrated/Total RPMs: #{migrated_rpm_count}/#{::Katello::Rpm.count}"
29
28
  puts "Migrated/Total errata: #{migrated_erratum_count}/#{::Katello::RepositoryErratum.count}"
30
29
  puts "Migrated/Total repositories: #{migrated_repo_count}/#{migratable_repo_count}"
31
-
30
+ puts
32
31
  # The timing formulas go negative if the amount of content is negligibly small
33
32
  if migration_minutes >= 5
34
33
  puts "Estimated migration time based on yum content: #{hours} hours, #{minutes} minutes"
35
- elsif migrated_rpm_count == ::Katello::Rpm.count &&
36
- migrated_erratum_count == ::Katello::RepositoryErratum.count &&
37
- migrated_repo_count == migratable_repo_count
38
- puts "All content has been migrated."
39
34
  else
40
35
  puts "Estimated migration time based on yum content: fewer than 5 minutes"
41
36
  end
42
-
43
37
  puts
44
38
  puts "\e[33mNote:\e[0m ensure there is sufficient storage space for /var/lib/pulp/published to triple in size before starting the migration process."
45
39
  puts "Check the size of /var/lib/pulp/published with 'du -sh /var/lib/pulp/published/'"
46
-
47
- puts
48
- puts "\e[33mNote:\e[0m ensure there is sufficient storage space for postgresql."
49
- puts "You will need additional space for your postgresql database. The partition holding '/var/opt/rh/rh-postgresql12/lib/pgsql/data/'"
50
- puts " will need additional free space equivalent to the size of your Mongo db database (/var/lib/mongodb/)."
51
-
52
- displayed_warning = false
53
- found_missing = false
54
- path = Dir.mktmpdir('unmigratable_content-')
55
- Katello::Pulp3::Migration::CORRUPTABLE_CONTENT_TYPES.each do |type|
56
- if type.missing_migrated_content.any?
57
- unless displayed_warning
58
- displayed_warning = true
59
- puts
60
- puts "============Missing/Corrupted Content Summary================"
61
- puts "WARNING: MISSING OR CORRUPTED CONTENT DETECTED"
62
- end
63
-
64
- found_missing = true
65
- name = type.name.demodulize
66
- puts "Corrupted or Missing #{name}: #{type.missing_migrated_content.count}/#{type.count}"
67
-
68
- File.open(File.join(path, name), 'w') do |file|
69
- text = type.missing_migrated_content.map(&:filename).join("\n") + "\n"
70
- file.write(text)
71
- end
72
- end
73
- end
74
-
75
- if found_missing
76
- puts "Corrupted or missing content has been detected, you can examine the list of content in #{path} and take action by either:"
77
- puts "1. Performing a 'Verify Checksum' sync under Advanced Sync Options, let it complete, and re-running the migration"
78
- puts "2. Deleting/disabling the affected repositories and running orphan cleanup (foreman-rake katello:delete_orphaned_content) and re-running the migration"
79
- puts "3. Manually correcting files on the filesystem in /var/lib/pulp/content/ and re-running the migration"
80
- puts "4. Mark currently corrupted or missing content as skipped (foreman-rake katello:approve_corrupted_migration_content). This will skip migration of missing or corrupted content."
81
- puts
82
- end
83
40
  end
84
41
  end
@@ -0,0 +1,16 @@
1
+ namespace :katello do
2
+ namespace :upgrades do
3
+ namespace '4.0' do
4
+ desc "Removes ostree & puppet content from candlepin and katello."
5
+ task :remove_ostree_puppet_content => ["environment", "check_ping"] do
6
+ contents = Katello::Content.where(content_type: ['ostree', 'puppet'])
7
+ contents.each do |content|
8
+ Katello::Resources::Candlepin::Content.destroy(content.organization.label, content.cp_content_id)
9
+ rescue RestClient::NotFound
10
+ #skip content not found
11
+ end
12
+ contents.destroy_all
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module Katello
2
- VERSION = "3.18.5".freeze
2
+ VERSION = "4.0.0.rc1".freeze
3
3
  end
@@ -0,0 +1,21 @@
1
+ module ProxyAPI
2
+ class ContainerGateway < ::ProxyAPI::Resource
3
+ def initialize(args)
4
+ @url = args[:url] + "/container_gateway/v2"
5
+ super args
6
+ end
7
+
8
+ def unauthenticated_repository_list(args = {})
9
+ # get '/v2/unauthenticated_repository_list/?'
10
+ # put '/v2/unauthenticated_repository_list/?'
11
+ @url += "/unauthenticated_repository_list"
12
+ if args.empty?
13
+ @unauthenticated_repo_list = parse get
14
+ else
15
+ parse put(args)
16
+ end
17
+ rescue => e
18
+ raise ::ProxyAPI::ProxyException.new(url, e, N_("Unable to perform unauthenticated repository list operation"))
19
+ end
20
+ end
21
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
data/package.json CHANGED
@@ -26,7 +26,7 @@
26
26
  "@sheerun/mutationobserver-shim": "^0.3.3",
27
27
  "@testing-library/jest-dom": "^5.3.0",
28
28
  "@testing-library/react": "^10.0.2",
29
- "@theforeman/builder": "^4.6.0",
29
+ "@theforeman/builder": ">= 6.0.0",
30
30
  "@theforeman/find-foreman": "^4.8.0",
31
31
  "axios-mock-adapter": "^1.10.0",
32
32
  "babel-eslint": "^10.0.3",
@@ -1,3 +1,2 @@
1
1
  // eslint-disable-next-line import/prefer-default-export
2
2
  export const useForemanSettings = () => ({ perPage: 20 });
3
- export const usePaginationOptions = () => [5, 10, 20, 50];
@@ -0,0 +1,2 @@
1
+ // eslint-disable-next-line import/prefer-default-export
2
+ export const usePaginationOptions = () => [5, 10, 20, 50];