katello 4.18.0.rc2 → 4.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of katello might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/assets/javascripts/katello/locale/bn/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/bn_IN/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/ca/katello.js +281 -17
- data/app/assets/javascripts/katello/locale/cs/katello.js +280 -16
- data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +282 -18
- data/app/assets/javascripts/katello/locale/de/katello.js +290 -26
- data/app/assets/javascripts/katello/locale/de_AT/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/de_DE/katello.js +281 -17
- data/app/assets/javascripts/katello/locale/el/katello.js +281 -17
- data/app/assets/javascripts/katello/locale/en/katello.js +280 -16
- data/app/assets/javascripts/katello/locale/en_GB/katello.js +280 -16
- data/app/assets/javascripts/katello/locale/en_US/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/es/katello.js +445 -181
- data/app/assets/javascripts/katello/locale/et_EE/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/fr/katello.js +1097 -833
- data/app/assets/javascripts/katello/locale/gl/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/gu/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/he_IL/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/hi/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/id/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/it/katello.js +281 -17
- data/app/assets/javascripts/katello/locale/ja/katello.js +826 -562
- data/app/assets/javascripts/katello/locale/ka/katello.js +677 -413
- data/app/assets/javascripts/katello/locale/kn/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/ko/katello.js +2325 -2062
- data/app/assets/javascripts/katello/locale/ml_IN/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/mr/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/nl_NL/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/or/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/pa/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/pl/katello.js +281 -17
- data/app/assets/javascripts/katello/locale/pl_PL/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/pt/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/pt_BR/katello.js +458 -194
- data/app/assets/javascripts/katello/locale/ro/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/ro_RO/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/ru/katello.js +281 -17
- data/app/assets/javascripts/katello/locale/sl/katello.js +281 -17
- data/app/assets/javascripts/katello/locale/sv_SE/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/ta/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/ta_IN/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/te/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/tr/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/vi/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/vi_VN/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/zh/katello.js +279 -15
- data/app/assets/javascripts/katello/locale/zh_CN/katello.js +831 -567
- data/app/assets/javascripts/katello/locale/zh_TW/katello.js +281 -17
- data/app/controllers/katello/api/registry/registry_proxies_controller.rb +2 -2
- data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +69 -19
- data/app/controllers/katello/api/v2/exports_controller.rb +14 -7
- data/app/controllers/katello/api/v2/flatpak_remote_repositories_controller.rb +9 -0
- data/app/controllers/katello/api/v2/host_errata_controller.rb +24 -2
- data/app/controllers/katello/api/v2/organizations_controller.rb +10 -4
- data/app/controllers/katello/api/v2/repositories_controller.rb +12 -3
- data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +36 -8
- data/app/lib/actions/katello/content_view/remove_rolling_repo_clone.rb +9 -1
- data/app/lib/actions/katello/repository/destroy.rb +3 -2
- data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +1 -2
- data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +1 -2
- data/app/lib/katello/errors.rb +2 -0
- data/app/models/katello/content_view_environment.rb +3 -0
- data/app/models/katello/rhel_lifecycle_status.rb +3 -1
- data/app/services/katello/pulp3/content_view_version/export.rb +32 -25
- data/app/services/katello/pulp3/content_view_version/export_validator.rb +1 -1
- data/app/views/katello/api/v2/content_facet/base.json.rabl +3 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/errata-type.filter.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +8 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn_IN.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ca.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/cs_CZ.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_AT.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_DE.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/el.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_GB.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_US.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/et_EE.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gl.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gu.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/he_IL.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/hi.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/id.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ka.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/kn.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ml_IN.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/mr.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/nl_NL.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/or.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pa.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl_PL.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro_RO.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sl.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sv_SE.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta_IN.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/te.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/tr.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi_VN.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +6 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +11 -11
- data/lib/katello/plugin.rb +6 -0
- data/lib/katello/tasks/repository.rake +67 -0
- data/lib/katello/version.rb +1 -1
- data/locale/bn/LC_MESSAGES/katello.mo +0 -0
- data/locale/bn/katello.po +279 -15
- data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
- data/locale/bn_IN/katello.po +279 -15
- data/locale/ca/LC_MESSAGES/katello.mo +0 -0
- data/locale/ca/katello.po +282 -18
- data/locale/cs/LC_MESSAGES/katello.mo +0 -0
- data/locale/cs/katello.po +280 -17
- data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
- data/locale/cs_CZ/katello.po +283 -19
- data/locale/de/LC_MESSAGES/katello.mo +0 -0
- data/locale/de/katello.po +295 -31
- data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
- data/locale/de_AT/katello.po +279 -15
- data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
- data/locale/de_DE/katello.po +282 -18
- data/locale/el/LC_MESSAGES/katello.mo +0 -0
- data/locale/el/katello.po +282 -18
- data/locale/en/LC_MESSAGES/katello.mo +0 -0
- data/locale/en/katello.po +280 -17
- data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
- data/locale/en_GB/katello.po +280 -16
- data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
- data/locale/en_US/katello.po +279 -15
- data/locale/es/LC_MESSAGES/katello.mo +0 -0
- data/locale/es/katello.po +449 -184
- data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
- data/locale/et_EE/katello.po +279 -15
- data/locale/fr/LC_MESSAGES/katello.mo +0 -0
- data/locale/fr/katello.po +1103 -840
- data/locale/gl/LC_MESSAGES/katello.mo +0 -0
- data/locale/gl/katello.po +279 -15
- data/locale/gu/LC_MESSAGES/katello.mo +0 -0
- data/locale/gu/katello.po +279 -15
- data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
- data/locale/he_IL/katello.po +279 -15
- data/locale/hi/LC_MESSAGES/katello.mo +0 -0
- data/locale/hi/katello.po +279 -15
- data/locale/id/LC_MESSAGES/katello.mo +0 -0
- data/locale/id/katello.po +279 -15
- data/locale/it/LC_MESSAGES/katello.mo +0 -0
- data/locale/it/katello.po +282 -18
- data/locale/ja/LC_MESSAGES/katello.mo +0 -0
- data/locale/ja/katello.po +833 -568
- data/locale/ka/LC_MESSAGES/katello.mo +0 -0
- data/locale/ka/katello.po +679 -413
- data/locale/katello.pot +775 -359
- data/locale/kn/LC_MESSAGES/katello.mo +0 -0
- data/locale/kn/katello.po +279 -15
- data/locale/ko/LC_MESSAGES/katello.mo +0 -0
- data/locale/ko/katello.po +2334 -2058
- data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
- data/locale/ml_IN/katello.po +279 -15
- data/locale/mr/LC_MESSAGES/katello.mo +0 -0
- data/locale/mr/katello.po +279 -15
- data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
- data/locale/nl_NL/katello.po +279 -15
- data/locale/or/LC_MESSAGES/katello.mo +0 -0
- data/locale/or/katello.po +279 -15
- data/locale/pa/LC_MESSAGES/katello.mo +0 -0
- data/locale/pa/katello.po +279 -15
- data/locale/pl/LC_MESSAGES/katello.mo +0 -0
- data/locale/pl/katello.po +282 -18
- data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
- data/locale/pl_PL/katello.po +279 -15
- data/locale/pt/LC_MESSAGES/katello.mo +0 -0
- data/locale/pt/katello.po +279 -15
- data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
- data/locale/pt_BR/katello.po +462 -197
- data/locale/ro/LC_MESSAGES/katello.mo +0 -0
- data/locale/ro/katello.po +279 -15
- data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
- data/locale/ro_RO/katello.po +279 -15
- data/locale/ru/LC_MESSAGES/katello.mo +0 -0
- data/locale/ru/katello.po +282 -18
- data/locale/sl/LC_MESSAGES/katello.mo +0 -0
- data/locale/sl/katello.po +282 -18
- data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
- data/locale/sv_SE/katello.po +279 -15
- data/locale/ta/LC_MESSAGES/katello.mo +0 -0
- data/locale/ta/katello.po +279 -15
- data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
- data/locale/ta_IN/katello.po +279 -15
- data/locale/te/LC_MESSAGES/katello.mo +0 -0
- data/locale/te/katello.po +279 -15
- data/locale/tr/LC_MESSAGES/katello.mo +0 -0
- data/locale/tr/katello.po +279 -15
- data/locale/vi/LC_MESSAGES/katello.mo +0 -0
- data/locale/vi/katello.po +279 -15
- data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
- data/locale/vi_VN/katello.po +279 -15
- data/locale/zh/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh/katello.po +279 -15
- data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh_CN/katello.po +836 -567
- data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh_TW/katello.po +282 -18
- data/webpack/components/Errata/index.js +18 -0
- data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/HostErrataConstants.js +3 -0
- data/webpack/global_index.js +0 -4
- data/webpack/redux/actions/RedHatRepositories/helpers.js +3 -3
- data/webpack/redux/reducers/index.js +0 -2
- metadata +4 -16
- data/webpack/components/extensions/about/SystemStatuses.js +0 -55
- data/webpack/components/extensions/about/SystemStatusesActions.js +0 -16
- data/webpack/components/extensions/about/SystemStatusesConsts.js +0 -3
- data/webpack/components/extensions/about/SystemStatusesReducer.js +0 -26
- data/webpack/components/extensions/about/SystemStatusesSelectors.js +0 -3
- data/webpack/components/extensions/about/__tests__/SystemStatuses.fixtures.js +0 -20
- data/webpack/components/extensions/about/__tests__/SystemStatuses.test.js +0 -14
- data/webpack/components/extensions/about/__tests__/SystemStatusesReducer.test.js +0 -32
- data/webpack/components/extensions/about/__tests__/__snapshots__/SystemStatuses.test.js.snap +0 -156
- data/webpack/components/extensions/about/__tests__/__snapshots__/SystemStatusesReducer.test.js.snap +0 -47
- data/webpack/components/extensions/about/index.js +0 -19
- data/webpack/components/extensions/reducers.js +0 -6
@@ -517,11 +517,11 @@ module Katello
|
|
517
517
|
PersonalAccessToken.transaction do
|
518
518
|
personal_token = PersonalAccessToken.where(user_id: User.current.id, name: 'registry').first
|
519
519
|
if personal_token.nil?
|
520
|
-
personal_token = PersonalAccessToken.new(user: User.current, name: 'registry', expires_at:
|
520
|
+
personal_token = PersonalAccessToken.new(user: User.current, name: 'registry', expires_at: Setting['registry_token_expiration_minutes'].minutes.from_now)
|
521
521
|
personal_token.generate_token
|
522
522
|
personal_token.save!
|
523
523
|
else
|
524
|
-
personal_token.expires_at =
|
524
|
+
personal_token.expires_at = Setting['registry_token_expiration_minutes'].minutes.from_now
|
525
525
|
personal_token.save!
|
526
526
|
end
|
527
527
|
rescue ActiveRecord::RecordInvalid
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module Katello
|
2
2
|
class Api::V2::ContentExportIncrementalsController < Api::V2::ExportsController
|
3
|
-
before_action :
|
4
|
-
before_action :
|
5
|
-
before_action :
|
6
|
-
before_action :
|
7
|
-
before_action :find_repository_export_view, :only => [:repository]
|
8
|
-
before_action :
|
3
|
+
before_action :find_exportable_content_view_version, :only => [:version] # determines @view
|
4
|
+
before_action :find_exportable_organization, :only => [:library] # determines @organization
|
5
|
+
before_action :find_library_export_view, :only => [:library] # determines @view from @organization
|
6
|
+
before_action :find_exportable_repository, :only => [:repository] # finds @repository
|
7
|
+
before_action :find_repository_export_view, :only => [:repository] # determines @view from @repository
|
8
|
+
before_action :find_incremental_history, :only => [:version, :library, :repository] # determines @history from @view
|
9
|
+
before_action :determine_export_format_from_history, :only => [:version, :library, :repository] # determines @export_format from @history
|
9
10
|
|
10
11
|
def_param_group :incremental do
|
11
12
|
param :from_history_id, :number, :desc => N_("Export history identifier used for incremental export. "\
|
@@ -42,25 +43,74 @@ module Katello
|
|
42
43
|
|
43
44
|
private
|
44
45
|
|
46
|
+
def find_export_view_helper(name_importable, name_syncable, organization, generated_for_importable, generated_for_syncable)
|
47
|
+
if params[:from_history_id].present?
|
48
|
+
find_incremental_history_from_id
|
49
|
+
@view = @history&.content_view_version&.content_view
|
50
|
+
else
|
51
|
+
importable_result = nil
|
52
|
+
syncable_result = nil
|
53
|
+
unless params[:format].present? && params[:format] == ::Katello::Pulp3::ContentViewVersion::Export::SYNCABLE
|
54
|
+
importable_result = determine_view_from_name(name_importable,
|
55
|
+
organization,
|
56
|
+
generated_for_importable)
|
57
|
+
end
|
58
|
+
unless params[:format].present? && params[:format] == ::Katello::Pulp3::ContentViewVersion::Export::IMPORTABLE
|
59
|
+
syncable_result = determine_view_from_name(name_syncable,
|
60
|
+
organization,
|
61
|
+
generated_for_syncable)
|
62
|
+
end
|
63
|
+
@view = [importable_result, syncable_result].compact.max_by(&:updated_at)
|
64
|
+
end
|
65
|
+
check_for_blank_view
|
66
|
+
end
|
67
|
+
|
45
68
|
def find_library_export_view
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
69
|
+
find_export_view_helper(
|
70
|
+
::Katello::ContentView::EXPORT_LIBRARY,
|
71
|
+
"#{::Katello::ContentView::EXPORT_LIBRARY}-SYNCABLE",
|
72
|
+
@organization,
|
73
|
+
:library_export,
|
74
|
+
:library_export_syncable
|
75
|
+
)
|
76
|
+
end
|
77
|
+
|
78
|
+
def find_repository_export_view
|
79
|
+
find_export_view_helper(
|
80
|
+
"Export-#{@repository.label}-#{@repository.library_instance_or_self.id}",
|
81
|
+
"Export-SYNCABLE-#{@repository.label}-#{@repository.library_instance_or_self.id}",
|
82
|
+
@repository.organization,
|
83
|
+
:repository_export,
|
84
|
+
:repository_export_syncable
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
88
|
+
def determine_view_from_name(name, organization, generated_for)
|
89
|
+
::Katello::ContentView.where(name: name,
|
90
|
+
organization: organization,
|
91
|
+
generated_for: generated_for).first
|
92
|
+
end
|
93
|
+
|
94
|
+
def check_for_blank_view
|
50
95
|
if @view.blank?
|
51
|
-
|
52
|
-
|
96
|
+
valid_params = ""
|
97
|
+
valid_params << " 'from_history_id':#{params[:from_history_id]}" if params[:from_history_id].present?
|
98
|
+
valid_params << " 'format':#{params[:format]}" if params[:format].present?
|
99
|
+
if valid_params.blank?
|
100
|
+
msg = _("Unable to find a base content view to use for incremental export. Please run a complete export instead.")
|
101
|
+
else
|
102
|
+
msg = _("Unable to find a base content view to use for incremental export using the provided parameters:%{params}") % { params: valid_params }
|
103
|
+
end
|
53
104
|
fail HttpErrors::BadRequest, msg
|
54
105
|
end
|
55
106
|
end
|
56
107
|
|
57
|
-
def
|
58
|
-
@
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
msg = _("Unable to incrementally export. Do a Full Export on the repository content.")
|
108
|
+
def determine_export_format_from_history
|
109
|
+
@export_format = @history.metadata[:format]
|
110
|
+
|
111
|
+
if params[:format].present? && @export_format != params[:format]
|
112
|
+
msg = _("The provided incremental export format '%{provided}' must match the previous export's format '%{previous}'. "\
|
113
|
+
"Consider using 'from_history_id' to point to a matching export.") % { provided: params[:format], previous: @export_format }
|
64
114
|
fail HttpErrors::BadRequest, msg
|
65
115
|
end
|
66
116
|
end
|
@@ -75,7 +75,9 @@ module Katello
|
|
75
75
|
end
|
76
76
|
|
77
77
|
def find_export_format
|
78
|
-
if
|
78
|
+
if @export_format.present?
|
79
|
+
@export_format
|
80
|
+
elsif params[:format]
|
79
81
|
unless ::Katello::Pulp3::ContentViewVersion::Export::FORMATS.include?(params[:format])
|
80
82
|
fail HttpErrors::UnprocessableEntity, _('Invalid export format provided. Format must be one of %s ') %
|
81
83
|
::Katello::Pulp3::ContentViewVersion::Export::FORMATS.join(',')
|
@@ -113,14 +115,11 @@ module Katello
|
|
113
115
|
end
|
114
116
|
end
|
115
117
|
|
116
|
-
def
|
118
|
+
def find_incremental_history
|
117
119
|
if params[:from_history_id].present?
|
118
|
-
|
119
|
-
if @history.blank?
|
120
|
-
throw_resource_not_found(name: 'export history',
|
121
|
-
id: params[:from_history_id])
|
122
|
-
end
|
120
|
+
find_incremental_history_from_id
|
123
121
|
else
|
122
|
+
# Use the latest export
|
124
123
|
@history = ::Katello::ContentViewVersionExportHistory.
|
125
124
|
latest(@view, destination_server: params[:destination_server])
|
126
125
|
if @history.blank?
|
@@ -129,5 +128,13 @@ module Katello
|
|
129
128
|
end
|
130
129
|
end
|
131
130
|
end
|
131
|
+
|
132
|
+
def find_incremental_history_from_id
|
133
|
+
@history = ::Katello::ContentViewVersionExportHistory.find(params[:from_history_id])
|
134
|
+
if @history.blank?
|
135
|
+
throw_resource_not_found(name: 'export history',
|
136
|
+
id: params[:from_history_id])
|
137
|
+
end
|
138
|
+
end
|
132
139
|
end
|
133
140
|
end
|
@@ -56,6 +56,7 @@ module Katello
|
|
56
56
|
param :product_name, String, :desc => N_("Name of the product to mirror the remote repository to")
|
57
57
|
param :organization_id, :number, :desc => N_("organization identifier")
|
58
58
|
def mirror
|
59
|
+
validate_product_for_mirroring
|
59
60
|
task = async_task(::Actions::Katello::Flatpak::MirrorRemoteRepository, @flatpak_remote_repository, @product)
|
60
61
|
respond_for_async :resource => task
|
61
62
|
end
|
@@ -94,5 +95,13 @@ module Katello
|
|
94
95
|
def rejected_autocomplete_items
|
95
96
|
['flatpak_remote_id', 'flatpak_remote']
|
96
97
|
end
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
def validate_product_for_mirroring
|
102
|
+
return unless @product&.redhat?
|
103
|
+
msg = _("Flatpak repositories cannot be mirrored into Red Hat products. Please select a custom product.")
|
104
|
+
fail HttpErrors::UnprocessableEntity, msg
|
105
|
+
end
|
97
106
|
end
|
98
107
|
end
|
@@ -7,6 +7,7 @@ module Katello
|
|
7
7
|
bugfix: Katello::Erratum::BUGZILLA, # ['bugfix', 'recommended']
|
8
8
|
security: Katello::Erratum::SECURITY, # ['security']
|
9
9
|
enhancement: Katello::Erratum::ENHANCEMENT, # ['enhancement', 'optional']
|
10
|
+
other: 'other', # any type not in the above categories
|
10
11
|
}.freeze
|
11
12
|
|
12
13
|
before_action :find_host, only: :index
|
@@ -15,6 +16,8 @@ module Katello
|
|
15
16
|
before_action :find_environment, only: :index
|
16
17
|
before_action :find_content_view, only: :index
|
17
18
|
|
19
|
+
after_action :strip_errata_type, only: :auto_complete_search
|
20
|
+
|
18
21
|
resource_description do
|
19
22
|
api_version 'v2'
|
20
23
|
api_base_url "/api"
|
@@ -41,7 +44,7 @@ module Katello
|
|
41
44
|
param :content_view_id, :number, :desc => N_("Calculate Applicable Errata based on a particular Content View"), :required => false
|
42
45
|
param :environment_id, :number, :desc => N_("Calculate Applicable Errata based on a particular Environment"), :required => false
|
43
46
|
param :include_applicable, :bool, :desc => N_("Return errata that are applicable to this host. Defaults to false)"), :required => false
|
44
|
-
param :type, String, :desc => N_("Return only errata of a particular type (security, bugfix, enhancement)"), :required => false
|
47
|
+
param :type, String, :desc => N_("Return only errata of a particular type (security, bugfix, enhancement, other)"), :required => false
|
45
48
|
param :severity, String, :desc => N_("Return only errata of a particular severity (None, Low, Moderate, Important, Critical)"), :required => false
|
46
49
|
param_group :search, Api::V2::ApiController
|
47
50
|
def index
|
@@ -89,7 +92,12 @@ module Katello
|
|
89
92
|
relation = @host.content_facet.installable_errata(@environment, @content_view)
|
90
93
|
end
|
91
94
|
if params[:type].present?
|
92
|
-
|
95
|
+
type_param = params[:type].to_sym
|
96
|
+
if type_param == :other
|
97
|
+
relation = relation.where.not(:errata_type => [Katello::Erratum::SECURITY, Katello::Erratum::BUGZILLA, Katello::Erratum::ENHANCEMENT].flatten)
|
98
|
+
elsif TYPES_FROM_PARAMS[type_param].present?
|
99
|
+
relation = relation.where(:errata_type => TYPES_FROM_PARAMS[type_param])
|
100
|
+
end
|
93
101
|
end
|
94
102
|
if params[:severity].present?
|
95
103
|
params[:severity] = ['None', ''] if params[:severity] == 'None'
|
@@ -142,6 +150,20 @@ module Katello
|
|
142
150
|
end
|
143
151
|
end
|
144
152
|
|
153
|
+
def strip_errata_type
|
154
|
+
return if response.body.blank?
|
155
|
+
|
156
|
+
begin
|
157
|
+
items = JSON.parse(response.body)
|
158
|
+
rescue JSON::ParserError
|
159
|
+
return
|
160
|
+
end
|
161
|
+
|
162
|
+
filtered = items.reject { |h| h['part'].to_s.strip == 'errata_type' }
|
163
|
+
|
164
|
+
response.body = filtered.to_json
|
165
|
+
end
|
166
|
+
|
145
167
|
def validate_index_params!
|
146
168
|
if (params[:content_view_id] && params[:environment_id].nil?) || (params[:environment_id] && params[:content_view_id].nil?)
|
147
169
|
fail _("Either both parameters 'content_view_id' and 'environment_id' should be specified or neither should be specified")
|
@@ -4,16 +4,22 @@ module Katello
|
|
4
4
|
|
5
5
|
include Api::V2::Rendering
|
6
6
|
include ForemanTasks::Triggers
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
redhat_provider update releases)
|
7
|
+
LOCAL_FIND_TAXONOMY_ACTIONS = %w(repo_discover cancel_repo_discover download_debug_certificate
|
8
|
+
cdn_configuration redhat_provider update releases).freeze
|
9
|
+
before_action :local_find_taxonomy, :only => LOCAL_FIND_TAXONOMY_ACTIONS
|
11
10
|
|
12
11
|
resource_description do
|
13
12
|
api_version 'v2'
|
14
13
|
api_base_url "/katello/api"
|
15
14
|
end
|
16
15
|
|
16
|
+
def self.before_find_taxonomy_actions
|
17
|
+
# used by RH Cloud to delay the execution of local_find_taxonomy
|
18
|
+
skip_before_action :local_find_taxonomy, :only => LOCAL_FIND_TAXONOMY_ACTIONS
|
19
|
+
yield
|
20
|
+
before_action :local_find_taxonomy, :only => LOCAL_FIND_TAXONOMY_ACTIONS
|
21
|
+
end
|
22
|
+
|
17
23
|
def_param_group :resource do
|
18
24
|
param :organization, Hash, :required => true, :action_aware => true do
|
19
25
|
param :name, String, :required => true
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Katello
|
2
2
|
class Api::V2::RepositoriesController < Api::V2::ApiController # rubocop:disable Metrics/ClassLength
|
3
3
|
include Katello::Concerns::FilteredAutoCompleteSearch
|
4
|
-
|
4
|
+
INDEX_ACTIONS = [:index, :auto_complete_search].freeze
|
5
5
|
generic_repo_wrap_params = []
|
6
6
|
RepositoryTypeManager.generic_remote_options(defined_only: true).each do |option|
|
7
7
|
generic_repo_wrap_params << option.name
|
@@ -16,8 +16,8 @@ module Katello
|
|
16
16
|
CONTENT_CREDENTIAL_SSL_CLIENT_CERT_TYPE = "ssl_client_cert".freeze
|
17
17
|
CONTENT_CREDENTIAL_SSL_CLIENT_KEY_TYPE = "ssl_client_key".freeze
|
18
18
|
|
19
|
-
before_action :find_optional_organization, :only =>
|
20
|
-
before_action :find_product, :only =>
|
19
|
+
before_action :find_optional_organization, :only => INDEX_ACTIONS
|
20
|
+
before_action :find_product, :only => INDEX_ACTIONS
|
21
21
|
before_action :find_product_for_create, :only => [:create]
|
22
22
|
before_action :find_organization_from_product, :only => [:create]
|
23
23
|
before_action :find_unauthorized_katello_resource, :only => [:gpg_key_content]
|
@@ -35,6 +35,15 @@ module Katello
|
|
35
35
|
skip_before_action :authorize, :only => [:gpg_key_content]
|
36
36
|
skip_before_action :check_media_type, :only => [:upload_content]
|
37
37
|
|
38
|
+
def self.before_index_actions
|
39
|
+
# used by RH Cloud to delay the execution of find_optional_organization and find_product
|
40
|
+
skip_before_action :find_optional_organization, :only => INDEX_ACTIONS
|
41
|
+
skip_before_action :find_product, :only => INDEX_ACTIONS
|
42
|
+
yield
|
43
|
+
before_action :find_optional_organization, :only => INDEX_ACTIONS
|
44
|
+
before_action :find_product, :only => INDEX_ACTIONS
|
45
|
+
end
|
46
|
+
|
38
47
|
def custom_index_relation(collection)
|
39
48
|
collection.includes(:product)
|
40
49
|
end
|
@@ -18,7 +18,8 @@ module Katello
|
|
18
18
|
|
19
19
|
included do
|
20
20
|
prepend Overrides
|
21
|
-
|
21
|
+
around_action :handle_content_view_environments_for_create, only: [:create]
|
22
|
+
before_action :handle_content_view_environments_for_update, only: [:update]
|
22
23
|
|
23
24
|
def destroy
|
24
25
|
Katello::RegistrationManager.unregister_host(@host, :unregistering => false)
|
@@ -34,21 +35,48 @@ module Katello
|
|
34
35
|
render(:locals => { :resource => @host }, :template => 'katello/api/v2/hosts/show', :status => :ok)
|
35
36
|
end
|
36
37
|
|
37
|
-
def
|
38
|
+
def handle_content_view_environments_for_create
|
39
|
+
# validations should occur before the action so that the request can fail and not render multiple responses
|
40
|
+
cves = validate_content_view_environment_params
|
41
|
+
yield
|
42
|
+
# the actual assigning needs to wait until the host is created
|
43
|
+
set_content_view_environments(cves)
|
44
|
+
end
|
45
|
+
|
46
|
+
def handle_content_view_environments_for_update
|
47
|
+
cves = validate_content_view_environment_params
|
48
|
+
set_content_view_environments(cves)
|
49
|
+
end
|
50
|
+
|
51
|
+
def validate_content_view_environment_params
|
38
52
|
content_facet_attributes = params.dig(:host, :content_facet_attributes)
|
39
|
-
return if content_facet_attributes.blank? ||
|
40
|
-
|
53
|
+
return if content_facet_attributes.blank? ||
|
54
|
+
(cve_params[:content_view_id].present? && cve_params[:lifecycle_environment_id].present?)
|
55
|
+
|
41
56
|
cves = ::Katello::ContentViewEnvironment.fetch_content_view_environments(
|
42
57
|
labels: cve_params[:content_view_environments],
|
43
58
|
ids: cve_params[:content_view_environment_ids],
|
44
|
-
organization:
|
45
|
-
if cves.
|
46
|
-
@host.content_facet.content_view_environments = cves
|
47
|
-
else
|
59
|
+
organization: find_organization || @host&.organization)
|
60
|
+
if cves.blank?
|
48
61
|
handle_errors(labels: cve_params[:content_view_environments],
|
49
62
|
ids: cve_params[:content_view_environment_ids])
|
50
63
|
end
|
64
|
+
cves
|
65
|
+
end
|
66
|
+
|
67
|
+
# rubocop:disable Naming/AccessorMethodName
|
68
|
+
def set_content_view_environments(cves)
|
69
|
+
return if cves.blank?
|
70
|
+
if @host.blank?
|
71
|
+
Rails.logger.debug "No host; not assigning content view environments"
|
72
|
+
return
|
73
|
+
elsif @host&.content_facet.blank?
|
74
|
+
content_facet = Katello::Host::ContentFacet.new(host: @host)
|
75
|
+
@host.content_facet = content_facet
|
76
|
+
end
|
77
|
+
@host.content_facet.content_view_environments = cves
|
51
78
|
end
|
79
|
+
# rubocop:enable Naming/AccessorMethodName
|
52
80
|
|
53
81
|
def cve_params
|
54
82
|
params.require(:host).require(:content_facet_attributes).permit(:content_view_id, :lifecycle_environment_id, content_view_environments: [], content_view_environment_ids: [])
|
@@ -20,7 +20,15 @@ module Actions
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def run
|
23
|
-
::Katello::Repository.where(id: input[:repository_ids]).
|
23
|
+
::Katello::Repository.where(id: input[:repository_ids]).each do |repository|
|
24
|
+
SmartProxy.unscoped.with_repo(repository).each do |smart_proxy|
|
25
|
+
next if smart_proxy.pulp_primary?
|
26
|
+
|
27
|
+
smart_proxy.content_counts&.dig("content_view_versions", repository.content_view_version_id.to_s, "repositories")&.delete(repository.id.to_s)
|
28
|
+
smart_proxy.save
|
29
|
+
end
|
30
|
+
repository.destroy!
|
31
|
+
end
|
24
32
|
end
|
25
33
|
end
|
26
34
|
end
|
@@ -96,8 +96,9 @@ module Actions
|
|
96
96
|
end
|
97
97
|
|
98
98
|
def handle_redhat_content(repository)
|
99
|
-
|
100
|
-
|
99
|
+
content_view_environment = repository.content_view.content_view_environment(repository.environment)
|
100
|
+
if content_view_environment && !repository.content_view.rolling?
|
101
|
+
plan_action(Candlepin::Environment::SetContent, repository.content_view, repository.environment, content_view_environment)
|
101
102
|
end
|
102
103
|
end
|
103
104
|
|
@@ -13,9 +13,8 @@ module Actions
|
|
13
13
|
}.merge(opts)
|
14
14
|
action_subject(organization)
|
15
15
|
validate_repositories_immediate!(organization) if options[:fail_on_missing_content]
|
16
|
-
content_view = ::Katello::Pulp3::ContentViewVersion::Export.
|
16
|
+
content_view = ::Katello::Pulp3::ContentViewVersion::Export.find_or_create_library_export_view(destination_server: options[:destination_server],
|
17
17
|
organization: organization,
|
18
|
-
create_by_default: true,
|
19
18
|
format: options[:format])
|
20
19
|
repo_ids_in_library = organization.default_content_view_version.repositories.exportable(format: options[:format]).immediate_or_none.pluck(:id)
|
21
20
|
content_view.update!(repository_ids: repo_ids_in_library)
|
@@ -8,9 +8,8 @@ module Actions
|
|
8
8
|
action_subject(repository)
|
9
9
|
validate_repositories_immediate!(repository)
|
10
10
|
validate_export_types!(repository, opts[:format])
|
11
|
-
content_view = ::Katello::Pulp3::ContentViewVersion::Export.
|
11
|
+
content_view = ::Katello::Pulp3::ContentViewVersion::Export.find_or_create_repository_export_view(
|
12
12
|
repository: repository,
|
13
|
-
create_by_default: true,
|
14
13
|
format: opts[:format])
|
15
14
|
content_view.update!(repository_ids: [repository.library_instance_or_self.id])
|
16
15
|
|
data/app/lib/katello/errors.rb
CHANGED
@@ -32,6 +32,9 @@ module Katello
|
|
32
32
|
scope :non_generated, -> { where(content_view: ::Katello::ContentView.ignore_generated) }
|
33
33
|
|
34
34
|
scoped_search :on => :id, :complete_value => true
|
35
|
+
scoped_search :on => :label, :complete_value => true
|
36
|
+
scoped_search :relation => :content_view, :on => :label, :rename => :content_view
|
37
|
+
scoped_search :relation => :lifecycle_environment, :on => :label, :rename => :lifecycle_environment
|
35
38
|
|
36
39
|
alias :lifecycle_environment :environment
|
37
40
|
has_one :organization, :through => :environment
|
@@ -14,7 +14,9 @@ module Katello
|
|
14
14
|
|
15
15
|
RHEL_EOS_SCHEDULE = { # dates that each support category ends
|
16
16
|
'RHEL10' => {
|
17
|
-
'full_support' =>
|
17
|
+
'full_support' => end_of_day('2030-05-31'),
|
18
|
+
'maintenance_support' => end_of_day('2035-05-31'),
|
19
|
+
'extended_support' => end_of_day('2038-05-31'),
|
18
20
|
},
|
19
21
|
'RHEL9' => {
|
20
22
|
'full_support' => end_of_day('2027-05-31'),
|
@@ -5,6 +5,9 @@ module Katello
|
|
5
5
|
include ImportExportCommon
|
6
6
|
SYNCABLE = "syncable".freeze
|
7
7
|
IMPORTABLE = "importable".freeze
|
8
|
+
UNDEFINED = "undefined".freeze
|
9
|
+
|
10
|
+
# Available formats for export (UNDEFINED excluded)
|
8
11
|
FORMATS = [SYNCABLE, IMPORTABLE].freeze
|
9
12
|
|
10
13
|
attr_reader :smart_proxy, :content_view_version, :destination_server, :from_content_view_version, :repository, :base_path
|
@@ -142,37 +145,41 @@ module Katello
|
|
142
145
|
is_a?(SyncableFormatExport) ? SYNCABLE : IMPORTABLE
|
143
146
|
end
|
144
147
|
|
145
|
-
def self.
|
146
|
-
format:
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
name = "#{::Katello::ContentView::EXPORT_LIBRARY}-SYNCABLE"
|
153
|
-
end
|
154
|
-
|
155
|
-
find_generated_export_view(create_by_default: create_by_default,
|
148
|
+
def self.find_or_create_library_export_view(destination_server:, organization:,
|
149
|
+
format: UNDEFINED)
|
150
|
+
case format
|
151
|
+
when UNDEFINED
|
152
|
+
fail ::Katello::Errors::InvalidExportFormat, _("Export format must be specified for library exports.")
|
153
|
+
when IMPORTABLE
|
154
|
+
return find_generated_export_view(create_by_default: true,
|
156
155
|
destination_server: destination_server,
|
157
156
|
organization: organization,
|
158
|
-
name:
|
159
|
-
generated_for:
|
157
|
+
name: ::Katello::ContentView::EXPORT_LIBRARY,
|
158
|
+
generated_for: :library_export)
|
159
|
+
when SYNCABLE
|
160
|
+
return find_generated_export_view(create_by_default: true,
|
161
|
+
destination_server: destination_server,
|
162
|
+
organization: organization,
|
163
|
+
name: "#{::Katello::ContentView::EXPORT_LIBRARY}-SYNCABLE",
|
164
|
+
generated_for: :library_export_syncable)
|
165
|
+
else
|
166
|
+
fail ::Katello::Errors::InvalidExportFormat, _("Unknown library export format '%s'.") % format
|
167
|
+
end
|
160
168
|
end
|
161
169
|
|
162
|
-
def self.
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
170
|
+
def self.find_or_create_repository_export_view(repository:, format: UNDEFINED)
|
171
|
+
case format
|
172
|
+
when UNDEFINED
|
173
|
+
fail ::Katello::Errors::InvalidExportFormat, _("Export format must be specified for non-incremental repository exports.")
|
174
|
+
when IMPORTABLE
|
175
|
+
return find_generated_export_view(create_by_default: true, destination_server: nil, organization: repository.organization,
|
176
|
+
name: "Export-#{repository.label}-#{repository.library_instance_or_self.id}", generated_for: :repository_export)
|
177
|
+
when SYNCABLE
|
178
|
+
return find_generated_export_view(create_by_default: true, destination_server: nil, organization: repository.organization,
|
179
|
+
name: "Export-SYNCABLE-#{repository.label}-#{repository.library_instance_or_self.id}", generated_for: :repository_export_syncable)
|
167
180
|
else
|
168
|
-
|
169
|
-
name = "Export-SYNCABLE-#{repository.label}-#{repository.library_instance_or_self.id}"
|
181
|
+
fail ::Katello::Errors::InvalidExportFormat, _("Unknown repository export format '%s'.") % format
|
170
182
|
end
|
171
|
-
find_generated_export_view(create_by_default: create_by_default,
|
172
|
-
destination_server: nil,
|
173
|
-
organization: repository.organization,
|
174
|
-
name: name,
|
175
|
-
generated_for: generated_for)
|
176
183
|
end
|
177
184
|
|
178
185
|
def self.generate_product_repo_strings(repositories:)
|
@@ -74,7 +74,7 @@ module Katello
|
|
74
74
|
# You are trying to export between an incrementally updated content view version and regular version
|
75
75
|
if from_content_view_version.incrementally_updated? != content_view_version.incrementally_updated?
|
76
76
|
fail ExportValidationError,
|
77
|
-
_("Cannot incrementally export from a incrementally
|
77
|
+
_("Cannot incrementally export from a incrementally updated version and a regular version or vice-versa. "\
|
78
78
|
" The exported Content View Version '%{content_view} %{current}' "\
|
79
79
|
"cannot be incrementally exported from version '%{from}.'"\
|
80
80
|
" Please do a full export." % { content_view: content_view_version.content_view.name,
|
data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot
CHANGED
@@ -2956,6 +2956,10 @@ msgstr ""
|
|
2956
2956
|
msgid "OSTree Repositories <div>{{ library.counts.ostree_repositories || 0 }}</div>"
|
2957
2957
|
msgstr ""
|
2958
2958
|
|
2959
|
+
#: app/assets/javascripts/bastion_katello/errata/errata-type.filter.js
|
2960
|
+
msgid "Other Advisory"
|
2961
|
+
msgstr ""
|
2962
|
+
|
2959
2963
|
#: app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-repository-sets.controller.js
|
2960
2964
|
msgid "Overridden"
|
2961
2965
|
msgstr ""
|
@@ -4733,6 +4737,10 @@ msgstr ""
|
|
4733
4737
|
msgid "Username of the upstream repository user for authentication. Leave empty if repository does not require authentication."
|
4734
4738
|
msgstr ""
|
4735
4739
|
|
4740
|
+
#: app/assets/javascripts/bastion_katello/products/discovery/views/discovery.html
|
4741
|
+
msgid "Using a search parameter will improve repository discovery. A blank search might return an incomplete list due to registry's API limits."
|
4742
|
+
msgstr ""
|
4743
|
+
|
4736
4744
|
#: app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html
|
4737
4745
|
msgid "Variant"
|
4738
4746
|
msgstr ""
|
@@ -293,6 +293,12 @@ msgid ""
|
|
293
293
|
" This Host is not currently registered with subscription-manager. Use the <a href=\"/hosts/register\">Register Host</a> workflow to complete registration."
|
294
294
|
msgstr ""
|
295
295
|
|
296
|
+
#: app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html
|
297
|
+
msgid ""
|
298
|
+
"<span> {{table.numSelected > 1? 'Register Content Hosts':'Register Content"
|
299
|
+
" Host' | translate}} </span>"
|
300
|
+
msgstr ""
|
301
|
+
|
296
302
|
#: app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html
|
297
303
|
msgid "1 Content Host"
|
298
304
|
msgid_plural ""
|
@@ -670,7 +676,6 @@ msgstr ""
|
|
670
676
|
|
671
677
|
#: app/assets/javascripts/bastion_katello/errata/views/apply-errata-confirm.html
|
672
678
|
#: app/assets/javascripts/bastion_katello/errata/views/apply-errata.html
|
673
|
-
#: app/assets/javascripts/bastion_katello/errata/views/errata.html
|
674
679
|
msgid "Apply Errata"
|
675
680
|
msgstr ""
|
676
681
|
|
@@ -3494,10 +3499,6 @@ msgstr ""
|
|
3494
3499
|
msgid "Register a Content Host"
|
3495
3500
|
msgstr ""
|
3496
3501
|
|
3497
|
-
#: app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html
|
3498
|
-
msgid "Register Content Host"
|
3499
|
-
msgstr ""
|
3500
|
-
|
3501
3502
|
#: app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html
|
3502
3503
|
#: app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html
|
3503
3504
|
msgid "Registered"
|