diff --git a/service/lib/agama/dbus/clients/storage.rb b/service/lib/agama/dbus/clients/storage.rb index f6201d1dc0..3f54dfd585 100644 --- a/service/lib/agama/dbus/clients/storage.rb +++ b/service/lib/agama/dbus/clients/storage.rb @@ -24,6 +24,7 @@ require "agama/dbus/clients/with_locale" require "agama/dbus/clients/with_progress" require "agama/dbus/clients/with_issues" +require "json" module Agama module DBus @@ -62,6 +63,22 @@ def finish dbus_object.Finish end + # Gets the current storage config. + # + # @return [Hash] + def config + serialized_config = dbus_object.GetConfig + JSON.parse(serialized_config, symbolize_names: true) + end + + # Sets the storage config. + # + # @param config [Hash] + def config=(config) + serialized_config = JSON.pretty_generate(config) + dbus_object.SetConfig(serialized_config) + end + private # @return [::DBus::Object] diff --git a/service/lib/agama/manager.rb b/service/lib/agama/manager.rb index 3874d4b71d..69ef425dd8 100644 --- a/service/lib/agama/manager.rb +++ b/service/lib/agama/manager.rb @@ -83,30 +83,19 @@ def startup_phase service_status.idle end - def locale=(locale) - service_status.busy - change_process_locale(locale) - users.update_issues - start_progress_with_descriptions( - _("Load software translations"), - _("Load storage translations") - ) - progress.step { software.locale = locale } - progress.step { storage.locale = locale } - ensure - service_status.idle - finish_progress - end - # Runs the config phase def config_phase service_status.busy + first_time = installation_phase.startup? installation_phase.config start_progress_with_descriptions( _("Analyze disks"), _("Configure software") ) - progress.step { storage.probe } + # FIXME: hot-fix for bsc#1234711, see {#probe_and_recover_storage}. In autoinstallation, the + # storage config could be applied before probing. In that case, the config has to be + # recovered. + progress.step { first_time ? probe_and_recover_storage : storage.probe } progress.step { software.probe } logger.info("Config phase done") @@ -159,6 +148,21 @@ def install_phase end # rubocop:enable Metrics/AbcSize + def locale=(locale) + service_status.busy + change_process_locale(locale) + users.update_issues + start_progress_with_descriptions( + _("Load software translations"), + _("Load storage translations") + ) + progress.step { software.locale = locale } + progress.step { storage.locale = locale } + ensure + service_status.idle + finish_progress + end + # Software client # # @return [DBus::Clients::Software] @@ -273,5 +277,12 @@ def iguana? # @return [ServiceStatusRecorder] attr_reader :service_status_recorder + + # Probes storage and recover the current config, if any. + def probe_and_recover_storage + storage_config = storage.config + storage.probe + storage.config = storage_config unless storage_config.empty? + end end end diff --git a/service/package/rubygem-agama-yast.changes b/service/package/rubygem-agama-yast.changes index 2eae3ae708..f16df1bbcf 100644 --- a/service/package/rubygem-agama-yast.changes +++ b/service/package/rubygem-agama-yast.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Fri Dec 20 15:05:11 UTC 2024 - José Iván López González + +- Hotfix to avoid losing the storage config with auto installation + (bsc#1234711). + ------------------------------------------------------------------- Fri Dec 20 12:18:56 UTC 2024 - Josef Reidinger