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.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/katello/katello.scss +72 -0
- data/app/controllers/katello/api/registry/registry_proxies_controller.rb +6 -4
- data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +0 -19
- data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -3
- data/app/controllers/katello/api/v2/content_credentials_controller.rb +24 -24
- data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +1 -1
- data/app/controllers/katello/api/v2/content_exports_controller.rb +4 -0
- data/app/controllers/katello/api/v2/content_views_controller.rb +2 -2
- data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +2 -3
- data/app/controllers/katello/api/v2/repositories_controller.rb +3 -19
- data/app/controllers/katello/api/v2/simple_content_access_controller.rb +34 -0
- data/app/controllers/katello/api/v2/subscriptions_controller.rb +1 -1
- data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +8 -4
- data/app/controllers/katello/concerns/api/v2/authorization.rb +1 -14
- data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +1 -1
- data/app/helpers/katello/sync_management_helper.rb +0 -2
- data/app/lib/actions/candlepin/environment/create.rb +1 -1
- data/app/lib/actions/candlepin/environment/set_content.rb +1 -1
- data/app/lib/actions/katello/activation_key/create.rb +9 -11
- data/app/lib/actions/katello/capsule_content/sync.rb +8 -8
- data/app/lib/actions/katello/capsule_content/sync_capsule.rb +9 -0
- data/app/lib/actions/katello/check_matching_content.rb +17 -0
- data/app/lib/actions/katello/content_view/environment_create.rb +6 -8
- data/app/lib/actions/katello/content_view/publish.rb +1 -1
- data/app/lib/actions/katello/content_view_version/incremental_update.rb +11 -7
- data/app/lib/actions/katello/host/hypervisors_update.rb +4 -4
- data/app/lib/actions/katello/organization/create.rb +3 -5
- data/app/lib/actions/katello/organization/destroy.rb +1 -1
- data/app/lib/actions/katello/organization/manifest_delete.rb +3 -5
- data/app/lib/actions/katello/organization/manifest_import.rb +1 -1
- data/app/lib/actions/katello/organization/manifest_refresh.rb +1 -1
- data/app/lib/actions/katello/orphan_cleanup/remove_orphans.rb +1 -1
- data/app/lib/actions/katello/repository/check_matching_content.rb +3 -1
- data/app/lib/actions/katello/repository/clone_contents.rb +8 -11
- data/app/lib/actions/katello/repository/create.rb +0 -8
- data/app/lib/actions/katello/repository/filtered_index_content.rb +3 -0
- data/app/lib/actions/katello/repository/index_content.rb +1 -0
- data/app/lib/actions/katello/repository/multi_clone_contents.rb +9 -12
- data/app/lib/actions/katello/repository/sync.rb +1 -5
- data/app/lib/actions/katello/repository/update.rb +0 -8
- data/app/lib/actions/middleware/execute_if_contents_changed.rb +4 -1
- data/app/lib/actions/pulp/orchestration/repository/refresh_repos.rb +0 -6
- data/app/lib/actions/pulp3/capsule_content/refresh_distribution.rb +3 -3
- data/app/lib/actions/pulp3/content_guard/refresh_all_distributions.rb +1 -2
- data/app/lib/actions/pulp3/content_migration_presenter.rb +2 -5
- data/app/lib/actions/pulp3/orchestration/repository/refresh_repos.rb +1 -6
- data/app/lib/katello/concerns/base_template_scope_extensions.rb +8 -0
- data/app/lib/katello/errors.rb +1 -1
- data/app/lib/katello/event_daemon/monitor.rb +53 -0
- data/app/lib/katello/event_daemon/runner.rb +99 -0
- data/app/lib/katello/logging.rb +32 -0
- data/app/lib/katello/messaging/connection.rb +1 -7
- data/app/lib/katello/util/pulpcore_content_filters.rb +1 -1
- data/app/lib/katello/validators/content_view_puppet_module_validator.rb +1 -1
- data/app/models/katello/activation_key.rb +2 -2
- data/app/models/katello/candlepin/repository_mapper.rb +1 -1
- data/app/models/katello/concerns/hostgroup_extensions.rb +2 -4
- data/app/models/katello/concerns/organization_extensions.rb +2 -2
- data/app/models/katello/concerns/pulp_database_unit.rb +0 -12
- data/app/models/katello/concerns/redhat_extensions.rb +8 -9
- data/app/models/katello/concerns/smart_proxy_extensions.rb +24 -0
- data/app/models/katello/content_view.rb +5 -1
- data/app/models/katello/content_view_environment.rb +2 -2
- data/app/models/katello/content_view_puppet_environment.rb +2 -2
- data/app/models/katello/content_view_version.rb +2 -1
- data/app/models/katello/content_view_version_export_history.rb +20 -0
- data/app/models/katello/erratum.rb +3 -1
- data/app/models/katello/file_unit.rb +0 -4
- data/app/models/katello/glue/candlepin/pool.rb +2 -0
- data/app/models/katello/glue/pulp/repo.rb +0 -6
- data/app/models/katello/glue/pulp/repos.rb +1 -22
- data/app/models/katello/host/content_facet.rb +31 -9
- data/app/models/katello/ping.rb +19 -39
- data/app/models/katello/pool.rb +5 -0
- data/app/models/katello/product.rb +3 -3
- data/app/models/katello/repository.rb +3 -3
- data/app/presenters/katello/host_subscription_presenter.rb +3 -4
- data/app/presenters/katello/host_subscriptions_presenter.rb +24 -0
- data/app/services/katello/applicability/applicable_content_helper.rb +6 -8
- data/app/services/katello/candlepin_event_listener.rb +11 -19
- data/app/services/katello/event_monitor/poller_thread.rb +2 -11
- data/app/services/katello/pulp/repository.rb +2 -4
- data/app/services/katello/pulp/smart_proxy_repository.rb +0 -15
- data/app/services/katello/pulp3/api/core.rb +0 -14
- data/app/services/katello/pulp3/erratum.rb +1 -2
- data/app/services/katello/pulp3/migration.rb +9 -83
- data/app/services/katello/pulp3/migration_plan.rb +5 -54
- data/app/services/katello/pulp3/migration_switchover.rb +5 -36
- data/app/services/katello/pulp3/repository/apt.rb +2 -1
- data/app/services/katello/pulp3/repository/yum.rb +2 -11
- data/app/services/katello/pulp3/repository.rb +13 -34
- data/app/services/katello/pulp3/rpm.rb +1 -5
- data/app/services/katello/pulp3/task.rb +5 -8
- data/app/services/katello/pulp3/task_group.rb +5 -13
- data/app/services/katello/repository_type.rb +1 -1
- data/app/views/foreman/smart_proxies/_content_tab.html.erb +4 -47
- data/app/views/foreman/smart_proxies/show.html.erb +1 -1
- data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +22 -25
- data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +1 -0
- data/app/views/katello/api/v2/organizations/show.json.rabl +7 -9
- data/app/views/katello/sync_management/_products.html.erb +1 -1
- data/app/views/overrides/organizations/_edit_override.html.erb +1 -4
- data/app/views/overrides/smart_proxies/_environment_tab.html.erb +1 -1
- data/app/views/overrides/smart_proxies/_environment_tab_pane.html.erb +1 -1
- data/config/katello.yaml.example +0 -3
- data/config/routes/api/v2.rb +8 -10
- data/db/migrate/20191204214919_add_content_view_version_counts.rb +0 -1
- data/db/migrate/20200514092553_move_katello_fields_from_hostgroups.katello.rb +1 -1
- data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +56 -0
- data/db/migrate/20210128231228_add_type_and_from_cvv_to_cvv_export_history.rb +14 -0
- data/db/migrate/20210201163238_migrate_background_download_policy_to_migrate.rb +7 -0
- data/db/seeds.d/104-proxy.rb +1 -1
- data/db/seeds.d/111-upgrade_tasks.rb +2 -1
- data/engines/bastion/app/assets/javascripts/bastion/auth/authorization.service.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-register-os-client.directive.js +17 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-client.html +11 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-deb-client.html +38 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-oracle-client.html +5 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-sles-client.html +28 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register.html +14 -11
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/download-policy.service.js +0 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +2 -2
- data/lib/katello/engine.rb +4 -5
- data/lib/katello/middleware/event_daemon.rb +1 -1
- data/lib/katello/permission_creator.rb +3 -2
- data/lib/katello/plugin.rb +2 -2
- data/lib/katello/tasks/jenkins.rake +1 -1
- data/lib/katello/tasks/pulp3_content_switchover.rake +20 -31
- data/lib/katello/tasks/pulp3_migration.rake +25 -45
- data/lib/katello/tasks/pulp3_migration_abort.rake +0 -8
- data/lib/katello/tasks/pulp3_migration_stats.rake +3 -46
- data/lib/katello/tasks/upgrades/4.0/remove_ostree_puppet_content.rake +16 -0
- data/lib/katello/version.rb +1 -1
- data/lib/proxy_api/container_gateway.rb +21 -0
- data/locale/bn/katello.edit.po +0 -0
- data/locale/cs/katello.edit.po +0 -0
- data/locale/de/katello.edit.po +0 -0
- data/locale/en/katello.edit.po +0 -0
- data/locale/es/katello.edit.po +0 -0
- data/locale/fr/katello.edit.po +0 -0
- data/locale/gu/katello.edit.po +0 -0
- data/locale/hi/katello.edit.po +0 -0
- data/locale/it/katello.edit.po +0 -0
- data/locale/ja/katello.edit.po +0 -0
- data/locale/kn/katello.edit.po +0 -0
- data/locale/ko/katello.edit.po +0 -0
- data/locale/mr/katello.edit.po +0 -0
- data/locale/or/katello.edit.po +0 -0
- data/locale/pa/katello.edit.po +0 -0
- data/locale/pt/katello.edit.po +0 -0
- data/locale/pt_BR/katello.edit.po +0 -0
- data/locale/ru/katello.edit.po +0 -0
- data/locale/ta/katello.edit.po +0 -0
- data/locale/te/katello.edit.po +0 -0
- data/locale/zh_CN/katello.edit.po +0 -0
- data/locale/zh_TW/katello.edit.po +0 -0
- data/package.json +1 -1
- data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +0 -1
- data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +2 -0
- data/webpack/__mocks__/foremanReact/components/common/dates/LongDateTime.js +5 -0
- data/webpack/{scenes/ContentViews/Details/Repositories → components/SelectableDropdown}/SelectableDropdown.js +20 -3
- data/webpack/components/SelectableDropdown/__tests__/SelectableDropdown.test.js +45 -0
- data/webpack/components/SelectableDropdown/index.js +3 -0
- data/webpack/components/Table/TableWrapper.js +2 -1
- data/webpack/components/Table/helpers.js +14 -0
- data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +0 -1
- data/webpack/containers/Application/overrides.scss +6 -0
- data/webpack/index.js +6 -0
- data/webpack/redux/actions/RedHatRepositories/helpers.js +5 -5
- data/webpack/scenes/ContentViews/ContentViewsActions.js +31 -2
- data/webpack/scenes/ContentViews/ContentViewsConstants.js +5 -1
- data/webpack/scenes/ContentViews/Copy/ContentViewCopySelectors.js +16 -0
- data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +77 -0
- data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +44 -0
- data/webpack/scenes/ContentViews/Copy/__tests__/contentViewCopyResult.fixtures.json +42 -0
- data/webpack/scenes/ContentViews/Copy/__tests__/copyContentView.test.js +39 -0
- data/webpack/scenes/ContentViews/Copy/index.js +4 -0
- data/webpack/scenes/ContentViews/Create/ContentViewCreateSelectors.js +16 -0
- data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +58 -0
- data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +175 -0
- data/webpack/scenes/ContentViews/Create/CreateContentViewModal.js +27 -0
- data/webpack/scenes/ContentViews/Create/__tests__/contentViewCreateResult.fixtures.json +42 -0
- data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +92 -0
- data/webpack/scenes/ContentViews/Create/index.js +4 -0
- data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +16 -0
- data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +20 -1
- data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +17 -7
- data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +19 -13
- data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +40 -0
- data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +124 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.fixtures.json +134 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +92 -0
- data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +44 -25
- data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js +17 -7
- data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +24 -0
- data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +53 -3
- data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +4 -3
- data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +41 -0
- data/webpack/scenes/ContentViews/helpers.js +13 -0
- data/webpack/scenes/SmartProxy/Content.js +17 -0
- data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +11 -0
- data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +3 -0
- data/webpack/scenes/SmartProxy/SmartProxyContentSelectors.js +16 -0
- data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +152 -0
- data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentResult.fixtures.json +140 -0
- data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +38 -0
- data/webpack/scenes/SmartProxy/index.js +4 -0
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +2 -7
- data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +3 -3
- data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +2 -2
- data/webpack/scenes/Subscriptions/Manifest/__tests__/SimpleContentAccess.test.js +2 -2
- data/webpack/scenes/Subscriptions/Manifest/index.js +0 -1
- data/webpack/test-utils/react-testing-lib-wrapper.js +5 -2
- data/webpack/utils/helpers.js +3 -0
- metadata +103 -63
- data/app/controllers/katello/api/v2/gpg_keys_controller.rb +0 -114
- data/app/lib/actions/pulp3/content_migration_reset.rb +0 -22
- data/app/lib/katello/util/hostgroup_facets_helper.rb +0 -126
- data/app/overrides/disable_turbolinks_on_proxies_index.rb +0 -5
- data/app/services/katello/event_daemon.rb +0 -135
- data/app/services/katello/pulp/content_counts_calculator.rb +0 -60
- data/db/migrate/20210201165835_add_migration_missing_content.rb +0 -12
- data/db/migrate/20210420140050_add_pulp3_hrefs_to_content_types_deb.rb +0 -5
- data/lib/katello/tasks/check_config.rake +0 -11
- data/lib/katello/tasks/fix_hostgroup_facets.rake +0 -8
- data/lib/katello/tasks/pulp3_migration_approve_corrupted.rake +0 -21
- data/lib/katello/tasks/pulp3_migration_reset.rake +0 -26
- data/lib/katello/tasks/reports.rake +0 -7
- data/lib/katello/tasks/upgrades/3.10/update_gpg_key_urls.rake +0 -32
- data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.scss +0 -5
- 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 < /etc/apt/sources.list <<'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< /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="<Host Name>" --activationkey="<Activation Key Name>"</code></pre>
|
37
|
+
|
38
|
+
</li></div>
|
@@ -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="<Activation Key Name>"</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
|
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
|
-
|
21
|
-
|
22
|
-
<p translate>Using an Activation Key:</p>
|
23
|
-
<pre><code>subscription-manager register --org="{{ organization.label }}" --activationkey="<Activation Key Name>"</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('
|
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
|
-
|
95
|
-
|
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-
|
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"
|
@@ -221,7 +221,7 @@
|
|
221
221
|
</p>
|
222
222
|
</div>
|
223
223
|
|
224
|
-
<div class="checkbox" ng-
|
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>
|
data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js
CHANGED
@@ -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
|
-
|
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.");
|
data/lib/katello/engine.rb
CHANGED
@@ -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,
|
@@ -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
|
data/lib/katello/plugin.rb
CHANGED
@@ -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.
|
270
|
+
:onlyif => proc { |proxy| proxy.pulp_mirror? }
|
271
271
|
end
|
272
272
|
|
273
273
|
::Katello::HostStatusManager::STATUSES.each do |status_class|
|
@@ -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"
|
7
|
-
|
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.
|
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
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
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",
|
4
|
-
|
5
|
-
|
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
|
-
|
17
|
-
|
18
|
-
|
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
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
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
|
-
|
35
|
-
|
36
|
-
|
22
|
+
sleep(10)
|
23
|
+
task = ForemanTasks::Task.find(task.id)
|
24
|
+
end
|
37
25
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
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
|
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
|
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
|
data/lib/katello/version.rb
CHANGED
@@ -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": "
|
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",
|