katello 5.0.0.rc2 → 5.0.1
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/katello/locale/bn/katello.js +63 -15
- data/app/assets/javascripts/katello/locale/bn_IN/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/ca/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/cs/katello.js +63 -15
- data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +64 -16
- data/app/assets/javascripts/katello/locale/de/katello.js +66 -18
- data/app/assets/javascripts/katello/locale/de_AT/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/de_DE/katello.js +63 -15
- data/app/assets/javascripts/katello/locale/el/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/en/katello.js +63 -15
- data/app/assets/javascripts/katello/locale/en_GB/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/en_US/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/es/katello.js +66 -18
- data/app/assets/javascripts/katello/locale/et_EE/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/fr/katello.js +300 -252
- data/app/assets/javascripts/katello/locale/gl/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/gu/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/he_IL/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/hi/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/id/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/it/katello.js +64 -16
- data/app/assets/javascripts/katello/locale/ja/katello.js +378 -330
- data/app/assets/javascripts/katello/locale/ka/katello.js +67 -19
- data/app/assets/javascripts/katello/locale/kn/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/ko/katello.js +297 -249
- data/app/assets/javascripts/katello/locale/ml_IN/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/mr/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/nl_NL/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/or/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/pa/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/pl/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/pl_PL/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/pt/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/pt_BR/katello.js +66 -18
- data/app/assets/javascripts/katello/locale/ro/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/ro_RO/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/ru/katello.js +64 -16
- data/app/assets/javascripts/katello/locale/sl/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/sv_SE/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/ta/katello.js +63 -15
- data/app/assets/javascripts/katello/locale/ta_IN/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/te/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/tr/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/vi/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/vi_VN/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/zh/katello.js +62 -14
- data/app/assets/javascripts/katello/locale/zh_CN/katello.js +285 -237
- data/app/assets/javascripts/katello/locale/zh_TW/katello.js +64 -16
- data/app/controllers/katello/api/registry/registry_proxies_controller.rb +29 -26
- data/app/controllers/katello/api/v2/content_view_histories_controller.rb +1 -1
- data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +10 -10
- data/app/controllers/katello/concerns/registration_commands_controller_extensions.rb +1 -1
- data/app/lib/katello/concerns/base_template_scope_extensions.rb +61 -2
- data/app/models/katello/concerns/smart_proxy_extensions.rb +1 -1
- data/app/views/katello/api/v2/activation_keys/base.json.rabl +18 -18
- data/app/views/katello/api/v2/content_facet/base.json.rabl +19 -19
- data/app/views/katello/api/v2/content_view_environments/show.json.rabl +10 -10
- data/app/views/katello/api/v2/content_view_versions/base.json.rabl +2 -2
- data/db/migrate/20220929204746_add_content_view_environment_content_facet.rb +5 -5
- data/db/migrate/20240730163043_add_content_view_environment_activation_key.rb +5 -5
- data/db/migrate/20260402151630_add_content_view_environment_to_hostgroup_content_facet.rb +4 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-info.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/new/views/activation-key-new.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn_IN.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ca.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/cs_CZ.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_AT.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_DE.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/el.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_GB.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_US.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/et_EE.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +23 -24
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gl.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gu.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/he_IL.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/hi.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/id.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +20 -30
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ka.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/kn.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +31 -39
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ml_IN.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/mr.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/nl_NL.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/or.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pa.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl_PL.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro_RO.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sl.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sv_SE.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta_IN.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/te.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/tr.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi_VN.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +8 -17
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +0 -12
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +8 -8
- data/lib/katello/tasks/upgrades/4.20/clean_cve_with_no_cvv.rake +4 -4
- data/lib/katello/version.rb +1 -1
- data/lib/rubocop/cop/katello/cve_abbreviation.rb +82 -0
- data/locale/bn/LC_MESSAGES/katello.mo +0 -0
- data/locale/bn/katello.po +63 -15
- data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
- data/locale/bn_IN/katello.po +62 -14
- data/locale/ca/LC_MESSAGES/katello.mo +0 -0
- data/locale/ca/katello.po +62 -14
- data/locale/cs/LC_MESSAGES/katello.mo +0 -0
- data/locale/cs/katello.po +64 -15
- data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
- data/locale/cs_CZ/katello.po +65 -17
- data/locale/de/LC_MESSAGES/katello.mo +0 -0
- data/locale/de/katello.po +67 -19
- data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
- data/locale/de_AT/katello.po +62 -14
- data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
- data/locale/de_DE/katello.po +64 -16
- data/locale/el/LC_MESSAGES/katello.mo +0 -0
- data/locale/el/katello.po +62 -14
- data/locale/en/LC_MESSAGES/katello.mo +0 -0
- data/locale/en/katello.po +64 -15
- data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
- data/locale/en_GB/katello.po +62 -14
- data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
- data/locale/en_US/katello.po +62 -14
- data/locale/es/LC_MESSAGES/katello.mo +0 -0
- data/locale/es/katello.po +68 -21
- data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
- data/locale/et_EE/katello.po +62 -14
- data/locale/fr/LC_MESSAGES/katello.mo +0 -0
- data/locale/fr/katello.po +304 -256
- data/locale/gl/LC_MESSAGES/katello.mo +0 -0
- data/locale/gl/katello.po +62 -14
- data/locale/gu/LC_MESSAGES/katello.mo +0 -0
- data/locale/gu/katello.po +62 -14
- data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
- data/locale/he_IL/katello.po +62 -14
- data/locale/hi/LC_MESSAGES/katello.mo +0 -0
- data/locale/hi/katello.po +62 -14
- data/locale/id/LC_MESSAGES/katello.mo +0 -0
- data/locale/id/katello.po +62 -14
- data/locale/it/LC_MESSAGES/katello.mo +0 -0
- data/locale/it/katello.po +64 -16
- data/locale/ja/LC_MESSAGES/katello.mo +0 -0
- data/locale/ja/katello.po +379 -331
- data/locale/ka/LC_MESSAGES/katello.mo +0 -0
- data/locale/ka/katello.po +67 -19
- data/locale/katello.pot +457 -393
- data/locale/kn/LC_MESSAGES/katello.mo +0 -0
- data/locale/kn/katello.po +62 -14
- data/locale/ko/LC_MESSAGES/katello.mo +0 -0
- data/locale/ko/katello.po +300 -251
- data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
- data/locale/ml_IN/katello.po +62 -14
- data/locale/mr/LC_MESSAGES/katello.mo +0 -0
- data/locale/mr/katello.po +62 -14
- data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
- data/locale/nl_NL/katello.po +62 -14
- data/locale/or/LC_MESSAGES/katello.mo +0 -0
- data/locale/or/katello.po +62 -14
- data/locale/pa/LC_MESSAGES/katello.mo +0 -0
- data/locale/pa/katello.po +62 -14
- data/locale/pl/LC_MESSAGES/katello.mo +0 -0
- data/locale/pl/katello.po +62 -14
- data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
- data/locale/pl_PL/katello.po +62 -14
- data/locale/pt/LC_MESSAGES/katello.mo +0 -0
- data/locale/pt/katello.po +62 -14
- data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
- data/locale/pt_BR/katello.po +68 -20
- data/locale/ro/LC_MESSAGES/katello.mo +0 -0
- data/locale/ro/katello.po +62 -14
- data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
- data/locale/ro_RO/katello.po +62 -14
- data/locale/ru/LC_MESSAGES/katello.mo +0 -0
- data/locale/ru/katello.po +64 -16
- data/locale/sl/LC_MESSAGES/katello.mo +0 -0
- data/locale/sl/katello.po +62 -14
- data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
- data/locale/sv_SE/katello.po +62 -14
- data/locale/ta/LC_MESSAGES/katello.mo +0 -0
- data/locale/ta/katello.po +63 -15
- data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
- data/locale/ta_IN/katello.po +62 -14
- data/locale/te/LC_MESSAGES/katello.mo +0 -0
- data/locale/te/katello.po +62 -14
- data/locale/tr/LC_MESSAGES/katello.mo +0 -0
- data/locale/tr/katello.po +62 -14
- data/locale/vi/LC_MESSAGES/katello.mo +0 -0
- data/locale/vi/katello.po +62 -14
- data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
- data/locale/vi_VN/katello.po +62 -14
- data/locale/zh/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh/katello.po +62 -14
- data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh_CN/katello.po +286 -238
- data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh_TW/katello.po +64 -16
- data/package.json +2 -2
- data/webpack/ForemanColumnExtensions/index.js +1 -1
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/AssignHostCVModal.js +3 -3
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +5 -5
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/OrderableAssignments.js +5 -5
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/AssignHostCVModal.test.js +17 -17
- data/webpack/components/extensions/Hosts/BulkActions/BulkAssignCVEnvsModal/BulkAssignCVEnvsModal.js +4 -8
- data/webpack/components/extensions/Hosts/BulkActions/BulkAssignCVEnvsModal/__tests__/BulkAssignCVEnvsModal.test.js +1 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkAssignCVEnvsModal/index.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/BulkChangeHostCollectionsModal.js +5 -10
- data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/__tests__/BulkChangeHostCollectionsModal.test.js +6 -24
- data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/index.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/04_ReviewFooter.js +2 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/BulkErrataWizard.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkManageTracesModal/BulkManageTracesModal.js +4 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkManageTracesModal/index.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/04_ReviewFooter.js +2 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/BulkPackagesWizard.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkRepositorySetsWizard/03_ReviewFooter.js +2 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkRepositorySetsWizard/BulkRepositorySetsWizard.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkSystemPurposeModal/BulkSystemPurposeModal.js +5 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkSystemPurposeModal/index.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/__tests__/bulkSystemPurposeModal.test.js +6 -1
- data/webpack/components/extensions/RegistrationCommands/__tests__/ActivationKeys.test.js +6 -6
- data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +1 -1
- data/webpack/containers/Application/config.js +1 -1
- data/webpack/eslint-rules/no-cve-abbreviation.js +121 -0
- data/webpack/global_index.js +6 -6
- data/webpack/redux/reducers/index.js +0 -2
- data/webpack/scenes/ActivationKeys/Details/ActivationKeyDetails.js +2 -2
- data/webpack/scenes/ActivationKeys/Details/components/AssignAKCVModal.js +3 -3
- data/webpack/scenes/ActivationKeys/Details/components/CreateAKCVModal.js +1 -1
- data/webpack/scenes/ActivationKeys/Details/components/{CVEDetailsCard.js → CvEnvDetailsCard.js} +9 -9
- data/webpack/scenes/ActivationKeys/Details/components/{CVEDetailsCreateCard.js → CvEnvDetailsCreateCard.js} +10 -10
- data/webpack/scenes/ActivationKeys/Details/components/__tests__/{CVEDetailsCreateCard.test.js → CvEnvDetailsCreateCard.test.js} +8 -8
- data/webpack/scenes/ContainerImages/Booted/BootedContainerImagesPage.js +2 -2
- data/webpack/scenes/ContainerImages/ContainerImagesPage.js +59 -52
- data/webpack/scenes/ContainerImages/ContainerImagesPage.scss +27 -4
- data/webpack/scenes/ContainerImages/Synced/SyncedContainerImagesPage.js +1 -1
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +1 -11
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +9 -9
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +0 -28
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +46 -1
- data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersionContent.test.js +41 -0
- data/webpack/scenes/Hosts/ChangeContentSource/actions.js +2 -2
- data/webpack/scenes/Subscriptions/Manifest/CdnTabContent.js +44 -0
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +179 -307
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModalConstants.js +5 -0
- data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +64 -70
- data/webpack/scenes/Subscriptions/Manifest/ManifestConstants.js +5 -0
- data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryContent.js +61 -0
- data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryReducer.js +1 -1
- data/webpack/scenes/Subscriptions/Manifest/ManifestTabContent.js +357 -0
- data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +129 -0
- data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +69 -110
- data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestHistoryReducer.test.js +6 -2
- data/webpack/scenes/Subscriptions/Manifest/index.js +16 -1
- data/webpack/scenes/Subscriptions/SubscriptionActions.js +79 -145
- data/webpack/scenes/Subscriptions/SubscriptionConstants.js +4 -35
- data/webpack/scenes/Subscriptions/SubscriptionsColumns.js +90 -0
- data/webpack/scenes/Subscriptions/SubscriptionsPage.js +297 -217
- data/webpack/scenes/Subscriptions/SubscriptionsPage.scss +40 -30
- data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsActions.js +11 -8
- data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsConstants.js +0 -1
- data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +104 -205
- data/webpack/scenes/Subscriptions/__tests__/subscriptions.fixtures.js +12 -8
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTable.js +245 -241
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.test.js +61 -27
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Table.js +487 -73
- data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +22 -4
- data/webpack/utils/contentViewEnvironmentLabel.js +3 -3
- data/webpack/utils/helpers.js +2 -2
- metadata +22 -20
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.scss +0 -39
- data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryTableSchema.js +0 -47
- data/webpack/scenes/Subscriptions/SubscriptionReducer.js +0 -223
- data/webpack/scenes/Subscriptions/SubscriptionsSelectors.js +0 -31
- data/webpack/scenes/Subscriptions/__tests__/SubscriptionsActions.test.js +0 -297
- data/webpack/scenes/Subscriptions/__tests__/SubscriptionsReducer.test.js +0 -244
- data/webpack/scenes/Subscriptions/__tests__/SubscriptionsSelectors.test.js +0 -47
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionNameFormatter.js +0 -23
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionTypeFormatter.js +0 -32
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableSchema.js +0 -169
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionTypeFormatter.test.js +0 -41
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/index.js +0 -2
- data/webpack/scenes/Subscriptions/index.js +0 -57
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"locale_data": {
|
|
4
4
|
"katello": {
|
|
5
5
|
"": {
|
|
6
|
-
"Project-Id-Version": "katello 5.0.0
|
|
6
|
+
"Project-Id-Version": "katello 5.0.0",
|
|
7
7
|
"Report-Msgid-Bugs-To": "",
|
|
8
8
|
"PO-Revision-Date": "2017-12-19 20:14+0000",
|
|
9
9
|
"Last-Translator": "Bryan Kearney <bryan.kearney@gmail.com>, 2026",
|
|
@@ -1359,6 +1359,9 @@
|
|
|
1359
1359
|
"Clean Backend Objects": [
|
|
1360
1360
|
""
|
|
1361
1361
|
],
|
|
1362
|
+
"Clear": [
|
|
1363
|
+
""
|
|
1364
|
+
],
|
|
1362
1365
|
"Clear any previous registration and run subscription-manager with --force.": [
|
|
1363
1366
|
""
|
|
1364
1367
|
],
|
|
@@ -1395,6 +1398,9 @@
|
|
|
1395
1398
|
"Collapse all": [
|
|
1396
1399
|
""
|
|
1397
1400
|
],
|
|
1401
|
+
"Collapse group": [
|
|
1402
|
+
""
|
|
1403
|
+
],
|
|
1398
1404
|
"Comma-separated list of content view environment labels associated with the activation key, in the format of 'lifecycle_environment_label/content_view_label'. Ignored if content_view_environment_ids is specified. Requires allow_multiple_content_views setting to be on.": [
|
|
1399
1405
|
""
|
|
1400
1406
|
],
|
|
@@ -1458,6 +1464,9 @@
|
|
|
1458
1464
|
"Configuration updated on Foreman": [
|
|
1459
1465
|
""
|
|
1460
1466
|
],
|
|
1467
|
+
"Confirm": [
|
|
1468
|
+
"確認"
|
|
1469
|
+
],
|
|
1461
1470
|
"Confirm Deletion": [
|
|
1462
1471
|
""
|
|
1463
1472
|
],
|
|
@@ -1725,6 +1734,9 @@
|
|
|
1725
1734
|
"Content view environment ID": [
|
|
1726
1735
|
""
|
|
1727
1736
|
],
|
|
1737
|
+
"Content view environment identifier": [
|
|
1738
|
+
""
|
|
1739
|
+
],
|
|
1728
1740
|
"Content view environments": [
|
|
1729
1741
|
""
|
|
1730
1742
|
],
|
|
@@ -2562,6 +2574,9 @@
|
|
|
2562
2574
|
"Download rate limit": [
|
|
2563
2575
|
""
|
|
2564
2576
|
],
|
|
2577
|
+
"Drag here": [
|
|
2578
|
+
""
|
|
2579
|
+
],
|
|
2565
2580
|
"Due to a change in your organizations, this container name has become ambiguous (org name '%{org_label}'). If you wish to continue using this container name, destroy the organization in conflict with '%{o_name} (id %{o_id}). If you wish to keep both orgs, destroy '%{o_label}/%{prod_label}/%{root_repo_label}' and retry your push using the id format.": [
|
|
2566
2581
|
""
|
|
2567
2582
|
],
|
|
@@ -2613,6 +2628,9 @@
|
|
|
2613
2628
|
"Edit details": [
|
|
2614
2629
|
""
|
|
2615
2630
|
],
|
|
2631
|
+
"Edit entitlements": [
|
|
2632
|
+
""
|
|
2633
|
+
],
|
|
2616
2634
|
"Edit filter rule": [
|
|
2617
2635
|
""
|
|
2618
2636
|
],
|
|
@@ -2844,6 +2862,9 @@
|
|
|
2844
2862
|
"Expand All": [
|
|
2845
2863
|
"全部展開"
|
|
2846
2864
|
],
|
|
2865
|
+
"Expand group": [
|
|
2866
|
+
""
|
|
2867
|
+
],
|
|
2847
2868
|
"Expire soon days": [
|
|
2848
2869
|
""
|
|
2849
2870
|
],
|
|
@@ -3184,7 +3205,7 @@
|
|
|
3184
3205
|
""
|
|
3185
3206
|
],
|
|
3186
3207
|
"Generate and Download": [
|
|
3187
|
-
"
|
|
3208
|
+
""
|
|
3188
3209
|
],
|
|
3189
3210
|
"Generate containerfile install command (%s package selected)": [
|
|
3190
3211
|
"",
|
|
@@ -3256,8 +3277,8 @@
|
|
|
3256
3277
|
"Greater than": [
|
|
3257
3278
|
""
|
|
3258
3279
|
],
|
|
3259
|
-
"Guests of": [
|
|
3260
|
-
"
|
|
3280
|
+
"Guests of %s": [
|
|
3281
|
+
""
|
|
3261
3282
|
],
|
|
3262
3283
|
"HTTP Proxies": [
|
|
3263
3284
|
""
|
|
@@ -3382,6 +3403,9 @@
|
|
|
3382
3403
|
"Host group IDs": [
|
|
3383
3404
|
"主機群組 ID"
|
|
3384
3405
|
],
|
|
3406
|
+
"Host group identifier": [
|
|
3407
|
+
""
|
|
3408
|
+
],
|
|
3385
3409
|
"Host groups": [
|
|
3386
3410
|
"主機群組"
|
|
3387
3411
|
],
|
|
@@ -4673,6 +4697,9 @@
|
|
|
4673
4697
|
"Manifest expiring soon": [
|
|
4674
4698
|
""
|
|
4675
4699
|
],
|
|
4700
|
+
"Manifest history table": [
|
|
4701
|
+
""
|
|
4702
|
+
],
|
|
4676
4703
|
"Manifest imported": [
|
|
4677
4704
|
""
|
|
4678
4705
|
],
|
|
@@ -5432,6 +5459,9 @@
|
|
|
5432
5459
|
"One or more processes require restarting": [
|
|
5433
5460
|
""
|
|
5434
5461
|
],
|
|
5462
|
+
"Only .zip manifest files are accepted": [
|
|
5463
|
+
""
|
|
5464
|
+
],
|
|
5435
5465
|
"Only On Demand repositories may have space reclaimed.": [
|
|
5436
5466
|
""
|
|
5437
5467
|
],
|
|
@@ -5474,9 +5504,6 @@
|
|
|
5474
5504
|
"Organization id": [
|
|
5475
5505
|
"組織 ID"
|
|
5476
5506
|
],
|
|
5477
|
-
"Organization id not found: '%s'": [
|
|
5478
|
-
""
|
|
5479
|
-
],
|
|
5480
5507
|
"Organization identifier": [
|
|
5481
5508
|
"組織識別子"
|
|
5482
5509
|
],
|
|
@@ -5492,9 +5519,6 @@
|
|
|
5492
5519
|
"Organization not found": [
|
|
5493
5520
|
""
|
|
5494
5521
|
],
|
|
5495
|
-
"Organization not found: '%s'": [
|
|
5496
|
-
""
|
|
5497
|
-
],
|
|
5498
5522
|
"Organization required": [
|
|
5499
5523
|
"需要的組織"
|
|
5500
5524
|
],
|
|
@@ -5786,9 +5810,6 @@
|
|
|
5786
5810
|
"Product id as listed from a host's installed products, \\\\\\n this is not the same product id as the products api returns": [
|
|
5787
5811
|
""
|
|
5788
5812
|
],
|
|
5789
|
-
"Product id not found: '%s'": [
|
|
5790
|
-
""
|
|
5791
|
-
],
|
|
5792
5813
|
"Product label": [
|
|
5793
5814
|
""
|
|
5794
5815
|
],
|
|
@@ -5804,9 +5825,6 @@
|
|
|
5804
5825
|
"Product name as listed from a host's installed products": [
|
|
5805
5826
|
"來自主機已安裝產品的產品名稱"
|
|
5806
5827
|
],
|
|
5807
|
-
"Product not found: '%s'": [
|
|
5808
|
-
""
|
|
5809
|
-
],
|
|
5810
5828
|
"Product the repository belongs to": [
|
|
5811
5829
|
"產品的軟體庫屬於"
|
|
5812
5830
|
],
|
|
@@ -6515,6 +6533,9 @@
|
|
|
6515
6533
|
"Requested access to '%s' is denied": [
|
|
6516
6534
|
""
|
|
6517
6535
|
],
|
|
6536
|
+
"Requested repository name is unknown to the registry.": [
|
|
6537
|
+
""
|
|
6538
|
+
],
|
|
6518
6539
|
"Requirements is not valid yaml.": [
|
|
6519
6540
|
""
|
|
6520
6541
|
],
|
|
@@ -6797,6 +6818,12 @@
|
|
|
6797
6818
|
"Saving alternate content source...": [
|
|
6798
6819
|
""
|
|
6799
6820
|
],
|
|
6821
|
+
"Saving subscription quantities...": [
|
|
6822
|
+
""
|
|
6823
|
+
],
|
|
6824
|
+
"Saving...": [
|
|
6825
|
+
"正在儲存…"
|
|
6826
|
+
],
|
|
6800
6827
|
"Scan": [
|
|
6801
6828
|
""
|
|
6802
6829
|
],
|
|
@@ -7133,6 +7160,9 @@
|
|
|
7133
7160
|
"Show a content view component": [
|
|
7134
7161
|
""
|
|
7135
7162
|
],
|
|
7163
|
+
"Show a content view environment": [
|
|
7164
|
+
""
|
|
7165
|
+
],
|
|
7136
7166
|
"Show a content view's history": [
|
|
7137
7167
|
"顯示內容視域的歷史紀錄"
|
|
7138
7168
|
],
|
|
@@ -8722,6 +8752,9 @@
|
|
|
8722
8752
|
"Upgrade via remote execution": [
|
|
8723
8753
|
""
|
|
8724
8754
|
],
|
|
8755
|
+
"Upload": [
|
|
8756
|
+
"上傳"
|
|
8757
|
+
],
|
|
8725
8758
|
"Upload Content Credential contents": [
|
|
8726
8759
|
""
|
|
8727
8760
|
],
|
|
@@ -8731,6 +8764,9 @@
|
|
|
8731
8764
|
"Upload a subscription manifest": [
|
|
8732
8765
|
"上傳訂閱清單"
|
|
8733
8766
|
],
|
|
8767
|
+
"Upload a zip file": [
|
|
8768
|
+
""
|
|
8769
|
+
],
|
|
8734
8770
|
"Upload content": [
|
|
8735
8771
|
""
|
|
8736
8772
|
],
|
|
@@ -9103,6 +9139,9 @@
|
|
|
9103
9139
|
"You currently have no content views to display": [
|
|
9104
9140
|
""
|
|
9105
9141
|
],
|
|
9142
|
+
"You do not have permission to view this organization.": [
|
|
9143
|
+
""
|
|
9144
|
+
],
|
|
9106
9145
|
"You do not have permissions to delete %s": [
|
|
9107
9146
|
"您沒有刪除 %s 的權限"
|
|
9108
9147
|
],
|
|
@@ -9535,6 +9574,12 @@
|
|
|
9535
9574
|
"has already been taken for a product in this organization.": [
|
|
9536
9575
|
"已經為此組織的產品使用。"
|
|
9537
9576
|
],
|
|
9577
|
+
"has already been taken for this activation key": [
|
|
9578
|
+
""
|
|
9579
|
+
],
|
|
9580
|
+
"has already been taken for this host": [
|
|
9581
|
+
""
|
|
9582
|
+
],
|
|
9538
9583
|
"has already been taken for this product.": [
|
|
9539
9584
|
"已經為此產品使用。"
|
|
9540
9585
|
],
|
|
@@ -9622,6 +9667,9 @@
|
|
|
9622
9667
|
"label of the repository": [
|
|
9623
9668
|
""
|
|
9624
9669
|
],
|
|
9670
|
+
"latest": [
|
|
9671
|
+
""
|
|
9672
|
+
],
|
|
9625
9673
|
"limit to only repositories with this download policy": [
|
|
9626
9674
|
""
|
|
9627
9675
|
],
|
|
@@ -109,7 +109,8 @@ module Katello
|
|
|
109
109
|
|
|
110
110
|
return true if authenticate_from_request(request.headers['Authorization'])
|
|
111
111
|
|
|
112
|
-
unauthorized
|
|
112
|
+
unauthorized unless performed?
|
|
113
|
+
false
|
|
113
114
|
end
|
|
114
115
|
|
|
115
116
|
def static_index_authorize
|
|
@@ -204,7 +205,7 @@ module Katello
|
|
|
204
205
|
:bad_request
|
|
205
206
|
)
|
|
206
207
|
end
|
|
207
|
-
org =
|
|
208
|
+
org = visible_organizations.where("LOWER(label) = LOWER(?)", org_label)
|
|
208
209
|
# reject ambiguous orgs (possible due to lowercase conversion)
|
|
209
210
|
if org.length > 1
|
|
210
211
|
# Determine if the repo already exists in one of the possible products. If yes,
|
|
@@ -238,11 +239,7 @@ module Katello
|
|
|
238
239
|
)
|
|
239
240
|
end
|
|
240
241
|
if org.length == 0
|
|
241
|
-
return
|
|
242
|
-
"NAME_UNKNOWN",
|
|
243
|
-
_("Organization not found: '%s'") % org_label,
|
|
244
|
-
:not_found
|
|
245
|
-
)
|
|
242
|
+
return render_push_name_unknown
|
|
246
243
|
end
|
|
247
244
|
@organization = org.first
|
|
248
245
|
true
|
|
@@ -257,13 +254,9 @@ module Katello
|
|
|
257
254
|
:bad_request
|
|
258
255
|
)
|
|
259
256
|
end
|
|
260
|
-
@organization =
|
|
257
|
+
@organization = visible_organizations.find_by_id(org_id.to_i)
|
|
261
258
|
if @organization.nil?
|
|
262
|
-
return
|
|
263
|
-
"NAME_UNKNOWN",
|
|
264
|
-
_("Organization id not found: '%s'") % org_id,
|
|
265
|
-
:not_found
|
|
266
|
-
)
|
|
259
|
+
return render_push_name_unknown
|
|
267
260
|
end
|
|
268
261
|
true
|
|
269
262
|
end
|
|
@@ -307,11 +300,7 @@ module Katello
|
|
|
307
300
|
)
|
|
308
301
|
end
|
|
309
302
|
if product.length == 0
|
|
310
|
-
return
|
|
311
|
-
"NAME_UNKNOWN",
|
|
312
|
-
_("Product not found: '%s'") % prod_label,
|
|
313
|
-
:not_found
|
|
314
|
-
)
|
|
303
|
+
return render_push_name_unknown
|
|
315
304
|
end
|
|
316
305
|
@product = product.first
|
|
317
306
|
true
|
|
@@ -326,19 +315,16 @@ module Katello
|
|
|
326
315
|
:bad_request
|
|
327
316
|
)
|
|
328
317
|
end
|
|
329
|
-
@product = @organization.products.find_by_id(prod_id.to_i)
|
|
318
|
+
@product = @organization.products.readable.find_by_id(prod_id.to_i)
|
|
330
319
|
if @product.nil?
|
|
331
|
-
return
|
|
332
|
-
"NAME_UNKNOWN",
|
|
333
|
-
_("Product id not found: '%s'") % prod_id,
|
|
334
|
-
:not_found
|
|
335
|
-
)
|
|
320
|
+
return render_push_name_unknown
|
|
336
321
|
end
|
|
337
322
|
true
|
|
338
323
|
end
|
|
339
324
|
|
|
340
325
|
def get_matching_products_from_org(organization, product_label)
|
|
341
|
-
|
|
326
|
+
# The actual push permission (sync_products) is checked in create_container_repo_if_needed.
|
|
327
|
+
return organization.products.readable.where("LOWER(label) = LOWER(?)", product_label)
|
|
342
328
|
end
|
|
343
329
|
|
|
344
330
|
def get_root_repo_from_product(product, root_repo_name)
|
|
@@ -386,7 +372,7 @@ module Katello
|
|
|
386
372
|
return render_podman_error(
|
|
387
373
|
'DENIED',
|
|
388
374
|
_("Requested access to '%s' is denied") % @container_name,
|
|
389
|
-
:
|
|
375
|
+
:forbidden
|
|
390
376
|
)
|
|
391
377
|
end
|
|
392
378
|
|
|
@@ -885,6 +871,23 @@ module Katello
|
|
|
885
871
|
render_podman_error("NAME_UNKNOWN", _("%s was not found!") % item, :not_found)
|
|
886
872
|
end
|
|
887
873
|
|
|
874
|
+
def render_push_name_unknown
|
|
875
|
+
# Uniform response for any organization/product that the current user cannot see.
|
|
876
|
+
# Collapsing "does not exist" and "not visible" into a single 404 NAME_UNKNOWN
|
|
877
|
+
# follows the OCI distribution spec guidance to return NAME_UNKNOWN rather than
|
|
878
|
+
# disclosing the existence of resources the client may not access.
|
|
879
|
+
render_podman_error("NAME_UNKNOWN", _("Requested repository name is unknown to the registry."), :not_found)
|
|
880
|
+
end
|
|
881
|
+
|
|
882
|
+
def visible_organizations
|
|
883
|
+
# Organizations visible to the current user. Used to scope push validation so that
|
|
884
|
+
# organizations the user cannot see are indistinguishable from organizations that do
|
|
885
|
+
# not exist. The actual push permission (sync_products) is checked later in
|
|
886
|
+
# create_container_repo_if_needed, which returns DENIED for visible but non-syncable
|
|
887
|
+
# products.
|
|
888
|
+
::Organization.my_organizations
|
|
889
|
+
end
|
|
890
|
+
|
|
888
891
|
def static_index
|
|
889
892
|
repos = Repository.readable_docker_catalog(@host)
|
|
890
893
|
return render json: { 'Registry' => request_url, 'Results' => [] } if repos.empty?
|
|
@@ -47,18 +47,18 @@ module Katello
|
|
|
47
47
|
|
|
48
48
|
def handle_content_view_environments_for_create
|
|
49
49
|
# validations should occur before the action so that the request can fail and not render multiple responses
|
|
50
|
-
|
|
50
|
+
cvenvs = validate_content_view_environment_params
|
|
51
51
|
yield
|
|
52
52
|
# Skip if the create action didn't persist the host
|
|
53
53
|
return unless @host&.persisted?
|
|
54
54
|
# Reload so @host.content_facet reflects what the create action saved
|
|
55
55
|
@host.reload
|
|
56
|
-
set_content_view_environments(
|
|
56
|
+
set_content_view_environments(cvenvs)
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
def handle_content_view_environments_for_update
|
|
60
|
-
|
|
61
|
-
set_content_view_environments(
|
|
60
|
+
cvenvs = validate_content_view_environment_params
|
|
61
|
+
set_content_view_environments(cvenvs)
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
def validate_content_view_environment_params
|
|
@@ -66,20 +66,20 @@ module Katello
|
|
|
66
66
|
return if content_facet_attributes.blank?
|
|
67
67
|
return unless cvenv_params[:content_view_environments].present? || cvenv_params[:content_view_environment_ids].present?
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
cvenvs = ::Katello::ContentViewEnvironment.fetch_content_view_environments(
|
|
70
70
|
labels: cvenv_params[:content_view_environments],
|
|
71
71
|
ids: cvenv_params[:content_view_environment_ids],
|
|
72
72
|
organization: find_organization || @host&.organization)
|
|
73
|
-
if
|
|
73
|
+
if cvenvs.blank?
|
|
74
74
|
handle_errors(labels: cvenv_params[:content_view_environments],
|
|
75
75
|
ids: cvenv_params[:content_view_environment_ids])
|
|
76
76
|
end
|
|
77
|
-
|
|
77
|
+
cvenvs
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
# rubocop:disable Naming/AccessorMethodName
|
|
81
|
-
def set_content_view_environments(
|
|
82
|
-
return if
|
|
81
|
+
def set_content_view_environments(cvenvs)
|
|
82
|
+
return if cvenvs.blank?
|
|
83
83
|
if @host.blank?
|
|
84
84
|
Rails.logger.debug "No host; not assigning content view environments"
|
|
85
85
|
return
|
|
@@ -87,7 +87,7 @@ module Katello
|
|
|
87
87
|
content_facet = Katello::Host::ContentFacet.new(host: @host)
|
|
88
88
|
@host.content_facet = content_facet
|
|
89
89
|
end
|
|
90
|
-
@host.content_facet.content_view_environments =
|
|
90
|
+
@host.content_facet.content_view_environments = cvenvs
|
|
91
91
|
end
|
|
92
92
|
# rubocop:enable Naming/AccessorMethodName
|
|
93
93
|
|
|
@@ -7,7 +7,7 @@ module Katello
|
|
|
7
7
|
aks = ActivationKey.authorized(:view_activation_keys)
|
|
8
8
|
.where(organization_id: registration_params[:organization_id])
|
|
9
9
|
.order(:name)
|
|
10
|
-
.map { |ak| { name: ak.name,
|
|
10
|
+
.map { |ak| { name: ak.name, cvEnvs: ak.content_view_environments.map(&:label).join(', ') } }
|
|
11
11
|
|
|
12
12
|
lces = KTEnvironment.readable
|
|
13
13
|
.where(organization_id: registration_params[:organization_id])
|
|
@@ -150,7 +150,7 @@ module Katello
|
|
|
150
150
|
returns array_of: 'Erratum', desc: 'Filtered applicable errata for the host'
|
|
151
151
|
end
|
|
152
152
|
def host_applicable_errata_filtered(host, filter = '')
|
|
153
|
-
host.applicable_errata.
|
|
153
|
+
host.applicable_errata.search_for(filter)
|
|
154
154
|
end
|
|
155
155
|
|
|
156
156
|
apipie :method, 'Returns filtered installable errata for the host' do
|
|
@@ -160,7 +160,66 @@ module Katello
|
|
|
160
160
|
end
|
|
161
161
|
def host_installable_errata_filtered(host, filter = '')
|
|
162
162
|
return [] if host.content_facet.nil?
|
|
163
|
-
host.installable_errata.
|
|
163
|
+
host.installable_errata.search_for(filter)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
apipie :method, 'Loads all host-errata-CVE pairs for a group of hosts' do
|
|
167
|
+
required :hosts, 'Array', desc: 'Batch of host objects from load_hosts'
|
|
168
|
+
keyword :installability, ['applicable', 'installable'], desc: 'Whether to return applicable or installable errata', default: 'applicable'
|
|
169
|
+
keyword :errata_filter, String, desc: 'Optional filter to apply on errata', default: ''
|
|
170
|
+
returns object_of: Hash, desc: 'Hash with :errata_by_host and :cves_by_erratum mappings'
|
|
171
|
+
example 'load_errata_and_cves_by_host(hosts) # => { errata_by_host: { 2 => [<Erratum "RHEA-2012:0055">] }, cves_by_erratum: { "RHEA-2012:0055" => ["CVE-2012-0055"] } }'
|
|
172
|
+
end
|
|
173
|
+
def load_errata_and_cves_by_host(hosts, installability: 'applicable', errata_filter: '')
|
|
174
|
+
host_ids = hosts.map(&:id)
|
|
175
|
+
facet_to_host = Katello::Host::ContentFacet.where(host_id: host_ids).pluck(:id, :host_id).to_h
|
|
176
|
+
|
|
177
|
+
query = Katello::Erratum
|
|
178
|
+
.select('katello_errata.*, katello_content_facet_errata.content_facet_id')
|
|
179
|
+
.joins(content_facet_errata: :content_facet)
|
|
180
|
+
.where(katello_content_facets: { host_id: host_ids })
|
|
181
|
+
|
|
182
|
+
query = query.search_for(errata_filter) if errata_filter.present?
|
|
183
|
+
|
|
184
|
+
if installability == 'installable'
|
|
185
|
+
query = query
|
|
186
|
+
.joins(:repository_errata)
|
|
187
|
+
.joins("INNER JOIN katello_content_facet_repositories ON katello_content_facet_repositories.repository_id = katello_repository_errata.repository_id AND katello_content_facet_repositories.content_facet_id = katello_content_facets.id")
|
|
188
|
+
.distinct
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# Deduplicate errata by id
|
|
192
|
+
facet_errata_pairs = query.pluck('katello_errata.id', 'katello_content_facet_errata.content_facet_id')
|
|
193
|
+
unique_erratum_ids = facet_errata_pairs.map(&:first).uniq
|
|
194
|
+
errata_map = Katello::Erratum.where(id: unique_erratum_ids).index_by(&:id)
|
|
195
|
+
errata_id_map = errata_map.transform_values(&:errata_id)
|
|
196
|
+
|
|
197
|
+
errata_by_host = {}
|
|
198
|
+
facet_errata_pairs.each do |erratum_id, content_facet_id|
|
|
199
|
+
erratum = errata_map[erratum_id]
|
|
200
|
+
next unless erratum
|
|
201
|
+
|
|
202
|
+
host_id = facet_to_host[content_facet_id]
|
|
203
|
+
errata_by_host[host_id] ||= []
|
|
204
|
+
errata_by_host[host_id] << erratum
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
cves_by_erratum_id = Katello::ErratumCve
|
|
208
|
+
.where(erratum_id: errata_id_map.keys)
|
|
209
|
+
.pluck(:erratum_id, :cve_id)
|
|
210
|
+
.group_by(&:first)
|
|
211
|
+
.transform_values { |pairs| pairs.map(&:last) }
|
|
212
|
+
|
|
213
|
+
cves_by_erratum = {}
|
|
214
|
+
cves_by_erratum_id.each do |db_id, cve_list|
|
|
215
|
+
errata_id_string = errata_id_map[db_id]
|
|
216
|
+
cves_by_erratum[errata_id_string] = cve_list if errata_id_string
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
{
|
|
220
|
+
errata_by_host: errata_by_host,
|
|
221
|
+
cves_by_erratum: cves_by_erratum,
|
|
222
|
+
}
|
|
164
223
|
end
|
|
165
224
|
|
|
166
225
|
apipie :method, 'Returns version of the latest applicable RPM package' do
|
|
@@ -8,30 +8,30 @@ node :multi_content_view_environment do |ak|
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
child :content_view_environments => :content_view_environments do
|
|
11
|
-
node :content_view do |
|
|
11
|
+
node :content_view do |cvenv|
|
|
12
12
|
{
|
|
13
|
-
id:
|
|
14
|
-
name:
|
|
15
|
-
label:
|
|
16
|
-
composite:
|
|
17
|
-
rolling:
|
|
18
|
-
content_view_version:
|
|
19
|
-
content_view_version_id:
|
|
20
|
-
content_view_version_latest:
|
|
21
|
-
content_view_default:
|
|
22
|
-
content_view_environment_id:
|
|
13
|
+
id: cvenv.content_view&.id,
|
|
14
|
+
name: cvenv.content_view&.name,
|
|
15
|
+
label: cvenv.content_view&.label,
|
|
16
|
+
composite: cvenv.content_view&.composite,
|
|
17
|
+
rolling: cvenv.content_view&.rolling,
|
|
18
|
+
content_view_version: cvenv.content_view_version&.version,
|
|
19
|
+
content_view_version_id: cvenv.content_view_version&.id,
|
|
20
|
+
content_view_version_latest: cvenv.content_view_version&.latest?,
|
|
21
|
+
content_view_default: cvenv.content_view&.default?,
|
|
22
|
+
content_view_environment_id: cvenv.id,
|
|
23
23
|
}
|
|
24
24
|
end
|
|
25
|
-
node :lifecycle_environment do |
|
|
25
|
+
node :lifecycle_environment do |cvenv|
|
|
26
26
|
{
|
|
27
|
-
id:
|
|
28
|
-
name:
|
|
29
|
-
label:
|
|
30
|
-
lifecycle_environment_library:
|
|
27
|
+
id: cvenv.lifecycle_environment&.id,
|
|
28
|
+
name: cvenv.lifecycle_environment&.name,
|
|
29
|
+
label: cvenv.lifecycle_environment&.label,
|
|
30
|
+
lifecycle_environment_library: cvenv.lifecycle_environment&.library?,
|
|
31
31
|
}
|
|
32
32
|
end
|
|
33
|
-
node :label do |
|
|
34
|
-
|
|
33
|
+
node :label do |cvenv|
|
|
34
|
+
cvenv.label
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
|
|
@@ -9,32 +9,32 @@ attributes :upgradable_rpm_count => :upgradable_package_count
|
|
|
9
9
|
attributes :applicable_module_stream_count, :upgradable_module_stream_count
|
|
10
10
|
|
|
11
11
|
child :content_view_environments => :content_view_environments do
|
|
12
|
-
node :content_view do |
|
|
12
|
+
node :content_view do |cvenv|
|
|
13
13
|
{
|
|
14
|
-
id:
|
|
15
|
-
name:
|
|
16
|
-
label:
|
|
17
|
-
composite:
|
|
18
|
-
rolling:
|
|
19
|
-
content_view_version:
|
|
20
|
-
content_view_version_id:
|
|
21
|
-
content_view_version_latest:
|
|
22
|
-
content_view_default:
|
|
14
|
+
id: cvenv.content_view&.id,
|
|
15
|
+
name: cvenv.content_view&.name,
|
|
16
|
+
label: cvenv.content_view&.label,
|
|
17
|
+
composite: cvenv.content_view&.composite,
|
|
18
|
+
rolling: cvenv.content_view&.rolling,
|
|
19
|
+
content_view_version: cvenv.content_view_version&.version,
|
|
20
|
+
content_view_version_id: cvenv.content_view_version&.id,
|
|
21
|
+
content_view_version_latest: cvenv.content_view_version&.latest?,
|
|
22
|
+
content_view_default: cvenv.content_view&.default?,
|
|
23
23
|
}
|
|
24
24
|
end
|
|
25
|
-
node :lifecycle_environment do |
|
|
25
|
+
node :lifecycle_environment do |cvenv|
|
|
26
26
|
{
|
|
27
|
-
id:
|
|
28
|
-
name:
|
|
29
|
-
label:
|
|
30
|
-
lifecycle_environment_library:
|
|
27
|
+
id: cvenv.lifecycle_environment&.id,
|
|
28
|
+
name: cvenv.lifecycle_environment&.name,
|
|
29
|
+
label: cvenv.lifecycle_environment&.label,
|
|
30
|
+
lifecycle_environment_library: cvenv.lifecycle_environment&.library?,
|
|
31
31
|
}
|
|
32
32
|
end
|
|
33
|
-
node :label do |
|
|
34
|
-
|
|
33
|
+
node :label do |cvenv|
|
|
34
|
+
cvenv.label
|
|
35
35
|
end
|
|
36
|
-
node :id do |
|
|
37
|
-
|
|
36
|
+
node :id do |cvenv|
|
|
37
|
+
cvenv.id
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
@@ -8,28 +8,28 @@ child :organization => :organization do
|
|
|
8
8
|
attributes :name, :label, :id
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
node :content_view do |
|
|
12
|
-
|
|
11
|
+
node :content_view do |cvenv|
|
|
12
|
+
cvenv.content_view&.slice(:id, :name, :label, :default)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
node :lifecycle_environment do |
|
|
16
|
-
|
|
15
|
+
node :lifecycle_environment do |cvenv|
|
|
16
|
+
cvenv.environment&.slice(:id, :name, :label, :library)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
node :environment do |
|
|
20
|
-
|
|
19
|
+
node :environment do |cvenv|
|
|
20
|
+
cvenv.environment&.slice(:id, :name, :label, :library)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
child :activation_keys => :activation_keys do
|
|
24
24
|
attributes :id, :name, :label
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
node :activation_keys_count do |
|
|
28
|
-
|
|
27
|
+
node :activation_keys_count do |cvenv|
|
|
28
|
+
cvenv.activation_keys.count
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
node :hosts_count do |
|
|
32
|
-
|
|
31
|
+
node :hosts_count do |cvenv|
|
|
32
|
+
cvenv.hosts.count
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
child :hostgroups => :hostgroups do
|
|
@@ -91,10 +91,10 @@ child :sorted_organization_readable_environments => :environments do
|
|
|
91
91
|
end
|
|
92
92
|
|
|
93
93
|
node :hostgroup_count do |env|
|
|
94
|
-
|
|
94
|
+
cvenv_ids = version.content_view&.content_view_environments&.where(environment_id: env.id)&.select(:id) || []
|
|
95
95
|
::Hostgroup.authorized('view_hostgroups').in_environments(env).where(
|
|
96
96
|
'katello_hostgroup_content_facets.content_view_environment_id IN (?)',
|
|
97
|
-
|
|
97
|
+
cvenv_ids
|
|
98
98
|
).count
|
|
99
99
|
end
|
|
100
100
|
end
|