Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 55 additions & 41 deletions service/lib/agama/dbus/storage/dasd.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,46 +42,33 @@ def initialize(manager, logger: nil)
textdomain "agama"
super(PATH, logger: logger)
@manager = manager
@serialized_system = serialize_system
@serialized_config = serialize_config
register_callbacks
end

dbus_interface "org.opensuse.Agama.Storage1.DASD" do
dbus_reader_attr_accessor :serialized_system, "s", dbus_name: "System"
dbus_reader_attr_accessor :serialized_config, "s", dbus_name: "Config"
dbus_method(:Probe) { probe }
dbus_method(:GetSystem, "out system:s") { recover_system }
dbus_method(:GetConfig, "out config:s") { recover_config }
dbus_method(:SetConfig, "in serialized_config:s") do |serialized_config|
configure(serialized_config)
end
dbus_signal(:SystemChanged, "system:s")
dbus_signal(:ProgressChanged, "progress:s")
dbus_signal(:SystemChanged, "serialized_system:s")
dbus_signal(:ProgressChanged, "serialized_progress:s")
dbus_signal(:ProgressFinished)
dbus_signal(:FormatChanged, "summary:s")
dbus_signal(:FormatChanged, "serialized_summary:s")
dbus_signal(:FormatFinished, "status:s")
end

# Implementation for the API method #Probe.
def probe
start_progress(1, _("Probing DASD devices"))
manager.probe
emit_system_changed
update_serialized_system
finish_progress
end

# Gets the serialized system information.
#
# @return [String]
def recover_system
manager.probe unless manager.probed?
JSON.pretty_generate(system_json)
end

# Gets the serialized config.
#
# @return [String]
def recover_config
JSON.pretty_generate(manager.config_json)
end

# Applies the given serialized DASD config.
#
# @todo Raise error if the config is not valid.
Expand All @@ -104,6 +91,17 @@ def configure(serialized_config)
# @return [Agama::Storage::DASD::Manager]
attr_reader :manager

def register_callbacks
on_progress_change { self.ProgressChanged(progress.to_json) }
on_progress_finish { self.ProgressFinished }
manager.on_format_change do |format_statuses|
summary_json = format_summary_json(format_statuses)
serialized_summary = JSON.pretty_generate(summary_json)
self.FormatChanged(serialized_summary)
end
manager.on_format_finish { |process_status| self.FormatFinished(process_status.to_s) }
end

# Performs the configuration process in a separate thread.
#
# The configuration could take long time (e.g., formatting devices). It is important to not
Expand All @@ -120,14 +118,46 @@ def perform_configuration(config_json)
@configuration_thread = Thread.new do
start_progress(1, _("Configuring DASD"))
manager.configure(config_json)
emit_system_changed
update_serialized_system
update_serialized_config
finish_progress
end
end

# @return [Hash]
def system_json
{ devices: devices_json }
# Updates the system info if needed.
def update_serialized_system
serialized_system = serialize_system
return if self.serialized_system == serialized_system

# This assignment emits a D-Bus PropertiesChanged.
self.serialized_system = serialized_system
self.SystemChanged(serialized_system)
end

# Updates the config info if needed.
def update_serialized_config
serialized_config = serialize_config
return if self.serialized_config == serialized_config

# This assignment emits a D-Bus PropertiesChanged.
self.serialized_config = serialized_config
end

# Generates the serialized JSON of the system.
#
# @return [String]
def serialize_system
manager.probe unless manager.probed?

json = { devices: devices_json }
JSON.pretty_generate(json)
end

# Generates the serialized JSON of the config.
#
# @return [String]
def serialize_config
JSON.pretty_generate(manager.config_json)
end

# @return [Hash]
Expand All @@ -151,22 +181,6 @@ def device_json(dasd)
}
end

# Emits the SystemChanged signal
def emit_system_changed
self.SystemChanged(recover_system)
end

def register_callbacks
on_progress_change { self.ProgressChanged(progress.to_json) }
on_progress_finish { self.ProgressFinished }
manager.on_format_change do |format_statuses|
summary_json = format_summary_json(format_statuses)
serialized_summary = JSON.pretty_generate(summary_json)
self.FormatChanged(serialized_summary)
end
manager.on_format_finish { |process_status| self.FormatFinished(process_status.to_s) }
end

# @return [Array<Hash>]
def format_summary_json(format_statuses)
format_statuses.map do |format_status|
Expand Down
89 changes: 53 additions & 36 deletions service/lib/agama/dbus/storage/iscsi.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# frozen_string_literal: true

# Copyright (c) [2025] SUSE LLC
# Copyright (c) [2025-2026] SUSE LLC
#
# All Rights Reserved.
#
Expand Down Expand Up @@ -42,43 +42,25 @@ def initialize(manager, logger: nil)
textdomain "agama"
super(PATH, logger: logger)
@manager = manager
@serialized_system = serialize_system
@serialized_config = serialize_config
register_progress_callbacks
end

dbus_interface "org.opensuse.Agama.Storage1.ISCSI" do
dbus_method(:GetSystem, "out system:s") { recover_system }
dbus_method(:GetConfig, "out config:s") { recover_config }
dbus_reader_attr_accessor :serialized_system, "s", dbus_name: "System"
dbus_reader_attr_accessor :serialized_config, "s", dbus_name: "Config"
dbus_method(:SetConfig, "in serialized_config:s") do |serialized_config|
configure(serialized_config)
end
dbus_method(:Discover, "in serialized_options:s, out result:u") do |serialized_options|
discover(serialized_options)
end
dbus_signal(:SystemChanged, "system:s")
dbus_signal(:ProgressChanged, "progress:s")
dbus_signal(:SystemChanged, "serialized_system:s")
dbus_signal(:ProgressChanged, "serialized_progress:s")
dbus_signal(:ProgressFinished)
end

# Gets the serialized system information.
#
# @return [String]
def recover_system
manager.probe unless manager.probed?

json = {
initiator: initiator_json,
targets: targets_json
}
JSON.pretty_generate(json)
end

# Gets the serialized config.
#
# @return [String]
def recover_config
JSON.pretty_generate(manager.config_json)
end

# Applies the given serialized iSCSI config.
#
# @todo Raise error if the config is not valid.
Expand All @@ -96,8 +78,9 @@ def configure(serialized_config)
logger.info("Configuring iSCSI")

start_progress(1, _("Configuring iSCSI"))
system_changed = manager.configure(config_json)
emit_system_changed if system_changed
manager.configure(config_json)
update_serialized_system
update_serialized_config
finish_progress
end

Expand All @@ -121,7 +104,7 @@ def discover(serialized_options)

start_progress(1, _("Performing iSCSI discovery"))
success = manager.discover(address, port, credentials: credentials)
emit_system_changed
update_serialized_system
finish_progress

success ? 0 : 1
Expand All @@ -132,9 +115,48 @@ def discover(serialized_options)
# @return [Agama::Storage::ISCSI::Manager]
attr_reader :manager

# Emits the SystemChanged signal
def emit_system_changed
self.SystemChanged(recover_system)
def register_progress_callbacks
on_progress_change { self.ProgressChanged(progress.to_json) }
on_progress_finish { self.ProgressFinished }
end

# Updates the system info if needed.
def update_serialized_system
serialized_system = serialize_system
return if self.serialized_system == serialized_system

# This assignment emits a D-Bus PropertiesChanged.
self.serialized_system = serialized_system
self.SystemChanged(serialized_system)
end

# Updates the config info if needed.
def update_serialized_config
serialized_config = serialize_config
return if self.serialized_config == serialized_config

# This assignment emits a D-Bus PropertiesChanged.
self.serialized_config = serialized_config
end

# Generates the serialized JSON of the system.
#
# @return [String]
def serialize_system
manager.probe unless manager.probed?

json = {
initiator: initiator_json,
targets: targets_json
}
JSON.pretty_generate(json)
end

# Generates the serialized JSON of the config.
#
# @return [String]
def serialize_config
JSON.pretty_generate(manager.config_json)
end

# @return [Hash]
Expand Down Expand Up @@ -164,11 +186,6 @@ def target_json(node)
locked: node.locked?
}
end

def register_progress_callbacks
on_progress_change { self.ProgressChanged(progress.to_json) }
on_progress_finish { self.ProgressFinished }
end
end
end
end
Expand Down
Loading
Loading