d-installer 0.4.2

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.
Files changed (71) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +29 -0
  3. data/Gemfile.lock +75 -0
  4. data/bin/d-installer +74 -0
  5. data/etc/d-installer.yaml +284 -0
  6. data/lib/dinstaller/can_ask_question.rb +48 -0
  7. data/lib/dinstaller/cmdline_args.rb +80 -0
  8. data/lib/dinstaller/cockpit_manager.rb +176 -0
  9. data/lib/dinstaller/config.rb +128 -0
  10. data/lib/dinstaller/config_reader.rb +164 -0
  11. data/lib/dinstaller/dbus/base_object.rb +58 -0
  12. data/lib/dinstaller/dbus/clients/base.rb +71 -0
  13. data/lib/dinstaller/dbus/clients/language.rb +86 -0
  14. data/lib/dinstaller/dbus/clients/manager.rb +76 -0
  15. data/lib/dinstaller/dbus/clients/software.rb +185 -0
  16. data/lib/dinstaller/dbus/clients/users.rb +112 -0
  17. data/lib/dinstaller/dbus/clients/with_progress.rb +56 -0
  18. data/lib/dinstaller/dbus/clients/with_service_status.rb +75 -0
  19. data/lib/dinstaller/dbus/clients.rb +34 -0
  20. data/lib/dinstaller/dbus/interfaces/progress.rb +113 -0
  21. data/lib/dinstaller/dbus/interfaces/service_status.rb +89 -0
  22. data/lib/dinstaller/dbus/language.rb +93 -0
  23. data/lib/dinstaller/dbus/language_service.rb +92 -0
  24. data/lib/dinstaller/dbus/manager.rb +147 -0
  25. data/lib/dinstaller/dbus/manager_service.rb +132 -0
  26. data/lib/dinstaller/dbus/question.rb +176 -0
  27. data/lib/dinstaller/dbus/questions.rb +124 -0
  28. data/lib/dinstaller/dbus/service_runner.rb +97 -0
  29. data/lib/dinstaller/dbus/service_status.rb +87 -0
  30. data/lib/dinstaller/dbus/software/manager.rb +131 -0
  31. data/lib/dinstaller/dbus/software/proposal.rb +82 -0
  32. data/lib/dinstaller/dbus/software.rb +31 -0
  33. data/lib/dinstaller/dbus/software_service.rb +86 -0
  34. data/lib/dinstaller/dbus/storage/proposal.rb +170 -0
  35. data/lib/dinstaller/dbus/storage.rb +30 -0
  36. data/lib/dinstaller/dbus/users.rb +132 -0
  37. data/lib/dinstaller/dbus/users_service.rb +92 -0
  38. data/lib/dinstaller/dbus/with_service_status.rb +48 -0
  39. data/lib/dinstaller/dbus/y2dir/manager/modules/Package.rb +51 -0
  40. data/lib/dinstaller/dbus/y2dir/manager/modules/PackagesProposal.rb +62 -0
  41. data/lib/dinstaller/dbus/y2dir/modules/Autologin.rb +214 -0
  42. data/lib/dinstaller/dbus/y2dir/software/modules/SpaceCalculation.rb +44 -0
  43. data/lib/dinstaller/dbus.rb +11 -0
  44. data/lib/dinstaller/errors.rb +28 -0
  45. data/lib/dinstaller/installation_phase.rb +106 -0
  46. data/lib/dinstaller/language.rb +73 -0
  47. data/lib/dinstaller/luks_activation_question.rb +92 -0
  48. data/lib/dinstaller/manager.rb +261 -0
  49. data/lib/dinstaller/network.rb +53 -0
  50. data/lib/dinstaller/package_callbacks.rb +69 -0
  51. data/lib/dinstaller/progress.rb +149 -0
  52. data/lib/dinstaller/question.rb +103 -0
  53. data/lib/dinstaller/questions_manager.rb +145 -0
  54. data/lib/dinstaller/security.rb +96 -0
  55. data/lib/dinstaller/service_status_recorder.rb +58 -0
  56. data/lib/dinstaller/software.rb +232 -0
  57. data/lib/dinstaller/storage/actions.rb +90 -0
  58. data/lib/dinstaller/storage/callbacks/activate.rb +93 -0
  59. data/lib/dinstaller/storage/callbacks/activate_luks.rb +93 -0
  60. data/lib/dinstaller/storage/callbacks/activate_multipath.rb +77 -0
  61. data/lib/dinstaller/storage/callbacks.rb +30 -0
  62. data/lib/dinstaller/storage/manager.rb +104 -0
  63. data/lib/dinstaller/storage/proposal.rb +197 -0
  64. data/lib/dinstaller/storage.rb +30 -0
  65. data/lib/dinstaller/users.rb +156 -0
  66. data/lib/dinstaller/with_progress.rb +63 -0
  67. data/lib/dinstaller.rb +5 -0
  68. data/share/dbus.conf +38 -0
  69. data/share/dbus.service +5 -0
  70. data/share/systemd.service +14 -0
  71. metadata +295 -0
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) [2022] SUSE LLC
4
+ #
5
+ # All Rights Reserved.
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify it
8
+ # under the terms of version 2 of the GNU General Public License as published
9
+ # by the Free Software Foundation.
10
+ #
11
+ # This program is distributed in the hope that it will be useful, but WITHOUT
12
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14
+ # more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with this program; if not, contact SUSE LLC.
18
+ #
19
+ # To contact SUSE LLC about this file by physical or electronic mail, you may
20
+ # find current contact information at www.suse.com.
21
+
22
+ require "storage"
23
+ require "y2storage/callbacks/issues_callback"
24
+ require "dinstaller/storage/callbacks/activate_multipath"
25
+ require "dinstaller/storage/callbacks/activate_luks"
26
+
27
+ module DInstaller
28
+ module Storage
29
+ module Callbacks
30
+ # Callbacks to manage devices activation
31
+ class Activate < ::Storage::ActivateCallbacksLuks
32
+ include Y2Storage::Callbacks::IssuesCallback
33
+
34
+ # Constructor
35
+ #
36
+ # @param questions_manager [QuestionsManager]
37
+ # @param logger [Logger]
38
+ def initialize(questions_manager, logger)
39
+ super()
40
+
41
+ @questions_manager = questions_manager
42
+ @logger = logger
43
+ @issues = Y2Issues::List.new
44
+ end
45
+
46
+ # Messages are ignored to not bother the user
47
+ #
48
+ # See Storage::Callbacks#message in libstorage-ng
49
+ def message(_message); end
50
+
51
+ # Decides whether multipath should be activated
52
+ #
53
+ # @see ActivateMultipath
54
+ #
55
+ # @param looks_like_real_multipath [Boolean] true if the system seems to contain a multipath
56
+ # device.
57
+ # @return [Boolean]
58
+ def multipath(looks_like_real_multipath)
59
+ callback = ActivateMultipath.new(questions_manager, logger)
60
+
61
+ callback.call(looks_like_real_multipath)
62
+ end
63
+
64
+ # Decides whether a LUKS device should be activated
65
+ #
66
+ # @see ActivateLuks
67
+ #
68
+ # @param info [Storage::LuksInfo]
69
+ # @param attempt [Numeric]
70
+ #
71
+ # @return [Storage::PairBoolString] Whether to activate the device and the password
72
+ def luks(info, attempt)
73
+ callback = ActivateLuks.new(questions_manager, logger)
74
+
75
+ activate, password = callback.call(info, attempt)
76
+
77
+ ::Storage::PairBoolString.new(activate, password || "")
78
+ end
79
+
80
+ private
81
+
82
+ # @return [QuestionsManager]
83
+ attr_reader :questions_manager
84
+
85
+ # @return [Logger]
86
+ attr_reader :logger
87
+
88
+ # Mixin Y2Storage::Callbacks::IssuesCallback expects a #log method
89
+ alias_method :log, :logger
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) [2022] SUSE LLC
4
+ #
5
+ # All Rights Reserved.
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify it
8
+ # under the terms of version 2 of the GNU General Public License as published
9
+ # by the Free Software Foundation.
10
+ #
11
+ # This program is distributed in the hope that it will be useful, but WITHOUT
12
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14
+ # more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with this program; if not, contact SUSE LLC.
18
+ #
19
+ # To contact SUSE LLC about this file by physical or electronic mail, you may
20
+ # find current contact information at www.suse.com.
21
+
22
+ require "dinstaller/luks_activation_question"
23
+ require "dinstaller/can_ask_question"
24
+ require "y2storage/disk_size"
25
+
26
+ module DInstaller
27
+ module Storage
28
+ module Callbacks
29
+ # Callbacks for LUKS activation
30
+ class ActivateLuks
31
+ include CanAskQuestion
32
+
33
+ # Constructor
34
+ #
35
+ # @param questions_manager [QuestionsManager]
36
+ # @param logger [Logger]
37
+ def initialize(questions_manager, logger)
38
+ @questions_manager = questions_manager
39
+ @logger = logger
40
+ end
41
+
42
+ # Asks whether to activate a LUKS device
43
+ #
44
+ # @note The process waits until the question is answered.
45
+ #
46
+ # @param info [Storage::LuksInfo]
47
+ # @param attempt [Numeric]
48
+ #
49
+ # @return [Array(Boolean, String)] The first value is whether to activate the device, and
50
+ # the second one is the LUKS password. Note that the password would only be considered
51
+ # when the first value is true.
52
+ def call(info, attempt)
53
+ question = question(info, attempt)
54
+
55
+ ask(question) do |q|
56
+ logger.info("#{q.text} #{q.answer}")
57
+
58
+ activate = q.answer == :decrypt
59
+ password = q.password
60
+
61
+ [activate, password]
62
+ end
63
+ end
64
+
65
+ private
66
+
67
+ # @return [QuestionsManager]
68
+ attr_reader :questions_manager
69
+
70
+ # @return [Logger]
71
+ attr_reader :logger
72
+
73
+ # Question to ask for LUKS activation
74
+ #
75
+ # @return [LuksActivationQuestion]
76
+ def question(info, attempt)
77
+ LuksActivationQuestion.new(info.device_name,
78
+ label: info.label,
79
+ size: formatted_size(info.size),
80
+ attempt: attempt)
81
+ end
82
+
83
+ # Generates a formatted representation of the size
84
+ #
85
+ # @param size [Y2Storage::DiskSize]
86
+ # @return [String]
87
+ def formatted_size(value)
88
+ Y2Storage::DiskSize.new(value).to_human_string
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) [2022] SUSE LLC
4
+ #
5
+ # All Rights Reserved.
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify it
8
+ # under the terms of version 2 of the GNU General Public License as published
9
+ # by the Free Software Foundation.
10
+ #
11
+ # This program is distributed in the hope that it will be useful, but WITHOUT
12
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14
+ # more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with this program; if not, contact SUSE LLC.
18
+ #
19
+ # To contact SUSE LLC about this file by physical or electronic mail, you may
20
+ # find current contact information at www.suse.com.
21
+
22
+ require "dinstaller/question"
23
+ require "dinstaller/can_ask_question"
24
+
25
+ module DInstaller
26
+ module Storage
27
+ module Callbacks
28
+ # Callbacks for multipath activation
29
+ class ActivateMultipath
30
+ include CanAskQuestion
31
+
32
+ # Constructor
33
+ #
34
+ # @param questions_manager [QuestionsManager]
35
+ # @param logger [Logger]
36
+ def initialize(questions_manager, logger)
37
+ @questions_manager = questions_manager
38
+ @logger = logger
39
+ end
40
+
41
+ # Asks whether to activate multipath devices
42
+ #
43
+ # @note The process waits until the question is answered.
44
+ #
45
+ # @param looks_like_real_multipath [Boolean] see {Callbacks::Activate#multipath}.
46
+ # @return [Boolean]
47
+ def call(looks_like_real_multipath)
48
+ return false unless looks_like_real_multipath
49
+
50
+ ask(question) do |q|
51
+ logger.info("#{q.text} #{q.answer}")
52
+
53
+ q.answer == :yes
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ # @return [QuestionsManager]
60
+ attr_reader :questions_manager
61
+
62
+ # @return [Logger]
63
+ attr_reader :logger
64
+
65
+ # Question to ask for multipath activation
66
+ #
67
+ # @return [Question]
68
+ def question
69
+ text = "The system seems to have multipath hardware. " \
70
+ "Do you want to activate multipath?"
71
+
72
+ Question.new(text, options: [:yes, :no])
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) [2022] SUSE LLC
4
+ #
5
+ # All Rights Reserved.
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify it
8
+ # under the terms of version 2 of the GNU General Public License as published
9
+ # by the Free Software Foundation.
10
+ #
11
+ # This program is distributed in the hope that it will be useful, but WITHOUT
12
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14
+ # more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with this program; if not, contact SUSE LLC.
18
+ #
19
+ # To contact SUSE LLC about this file by physical or electronic mail, you may
20
+ # find current contact information at www.suse.com.
21
+
22
+ module DInstaller
23
+ module Storage
24
+ # Module for callbacks related to storage actions
25
+ module Callbacks
26
+ end
27
+ end
28
+ end
29
+
30
+ require "dinstaller/storage/callbacks/activate"
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) [2022] SUSE LLC
4
+ #
5
+ # All Rights Reserved.
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify it
8
+ # under the terms of version 2 of the GNU General Public License as published
9
+ # by the Free Software Foundation.
10
+ #
11
+ # This program is distributed in the hope that it will be useful, but WITHOUT
12
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14
+ # more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with this program; if not, contact SUSE LLC.
18
+ #
19
+ # To contact SUSE LLC about this file by physical or electronic mail, you may
20
+ # find current contact information at www.suse.com.
21
+
22
+ require "yast"
23
+ require "y2storage/storage_manager"
24
+ require "dinstaller/storage/proposal"
25
+ require "dinstaller/storage/callbacks"
26
+
27
+ Yast.import "PackagesProposal"
28
+
29
+ module DInstaller
30
+ module Storage
31
+ # Manager to handle storage configuration
32
+ class Manager
33
+ def initialize(logger, config)
34
+ @logger = logger
35
+ @config = config
36
+ end
37
+
38
+ # Probes storage devices and performs an initial proposal
39
+ #
40
+ # @param questions_manager [QuestionsManager]
41
+ def probe(questions_manager)
42
+ # TODO: Add progress once this is moved to its own service
43
+ logger.info "Probing storage and performing proposal"
44
+ activate_devices(questions_manager)
45
+ probe_devices
46
+ proposal.calculate
47
+ end
48
+
49
+ # Prepares the partitioning to install the system
50
+ def install
51
+ add_packages
52
+ Yast::WFM.CallFunction("inst_prepdisk", [])
53
+ end
54
+
55
+ # Umounts the target file system
56
+ def finish
57
+ Yast::WFM.CallFunction("umount_finish", ["Write"])
58
+ end
59
+
60
+ # Storage proposal manager
61
+ #
62
+ # @return [Storage::Proposal]
63
+ def proposal
64
+ @proposal ||= Proposal.new(logger, config)
65
+ end
66
+
67
+ private
68
+
69
+ PROPOSAL_ID = "storage_proposal"
70
+ private_constant :PROPOSAL_ID
71
+
72
+ # @return [Logger]
73
+ attr_reader :logger
74
+
75
+ # @return [Config]
76
+ attr_reader :config
77
+
78
+ # Activates the devices, calling activation callbacks if needed
79
+ #
80
+ # @param questions_manager [QuestionsManager]
81
+ def activate_devices(questions_manager)
82
+ callbacks = Callbacks::Activate.new(questions_manager, logger)
83
+
84
+ Y2Storage::StorageManager.instance.activate(callbacks)
85
+ end
86
+
87
+ # Probes the devices
88
+ def probe_devices
89
+ # TODO: probe callbacks
90
+ Y2Storage::StorageManager.instance.probe
91
+ end
92
+
93
+ # Adds the required packages to the list of resolvables to install
94
+ def add_packages
95
+ devicegraph = Y2Storage::StorageManager.instance.staging
96
+ packages = devicegraph.used_features.pkg_list
97
+ return if packages.empty?
98
+
99
+ logger.info "Selecting these packages for installation: #{packages}"
100
+ Yast::PackagesProposal.SetResolvables(PROPOSAL_ID, :package, packages)
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,197 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) [2022] SUSE LLC
4
+ #
5
+ # All Rights Reserved.
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify it
8
+ # under the terms of version 2 of the GNU General Public License as published
9
+ # by the Free Software Foundation.
10
+ #
11
+ # This program is distributed in the hope that it will be useful, but WITHOUT
12
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14
+ # more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with this program; if not, contact SUSE LLC.
18
+ #
19
+ # To contact SUSE LLC about this file by physical or electronic mail, you may
20
+ # find current contact information at www.suse.com.
21
+
22
+ require "y2storage/storage_manager"
23
+ require "y2storage/guided_proposal"
24
+ require "y2storage/proposal_settings"
25
+ require "y2storage/dialogs/guided_setup/helpers/disk"
26
+
27
+ module DInstaller
28
+ module Storage
29
+ # Backend class to calculate a storage proposal
30
+ class Proposal
31
+ class NoProposalError < StandardError; end
32
+
33
+ # Constructor
34
+ #
35
+ # @param logger [Logger]
36
+ # @param config [Config]
37
+ def initialize(logger, config)
38
+ @logger = logger
39
+ @config = config
40
+ @listeners = []
41
+ end
42
+
43
+ def add_on_change_listener(&block)
44
+ @listeners << block
45
+ end
46
+
47
+ def changed!
48
+ @listeners.each(&:call)
49
+ end
50
+
51
+ # Available devices for installation
52
+ #
53
+ # @return [Array<Y2Storage::Device>]
54
+ def available_devices
55
+ disk_analyzer.candidate_disks
56
+ end
57
+
58
+ # Label that should be used to represent the given disk in the UI
59
+ #
60
+ # NOTE: this is likely a temporary solution. The label should not be calculated in the backend
61
+ # in the future. See the note about available_devices at {DBus::Storage::Proposal}.
62
+ #
63
+ # The label has the form: "NAME, SIZE, [USB], INSTALLED_SYSTEMS".
64
+ #
65
+ # Examples:
66
+ #
67
+ # "/dev/sda, 250.00 GiB, Windows, OpenSUSE"
68
+ # "/dev/sdb, 8.00 GiB, USB"
69
+ #
70
+ # @param device [Y2Storage::Device]
71
+ # @return [String]
72
+ def device_label(device)
73
+ disk_helper.label(device)
74
+ end
75
+
76
+ # Name of devices where to perform the installation
77
+ #
78
+ # @raise [NoProposalError] if no proposal yet
79
+ #
80
+ # @return [Array<String>]
81
+ def candidate_devices
82
+ raise NoProposalError unless proposal
83
+
84
+ proposal.settings.candidate_devices
85
+ end
86
+
87
+ # Whether the proposal should create LVM devices
88
+ #
89
+ # @raise [NoProposalError] if no proposal yet
90
+ #
91
+ # @return [Boolean]
92
+ def lvm?
93
+ raise NoProposalError unless proposal
94
+
95
+ proposal.settings.use_lvm
96
+ end
97
+
98
+ # Calculates a new proposal
99
+ #
100
+ # @param settings [Hash] settings to calculate the proposal
101
+ # (e.g., { "use_lvm" => true, "candidate_devices" => ["/dev/sda"]}). Note that keys should
102
+ # match with a public setter.
103
+ #
104
+ # @return [Boolean] whether the proposal was correctly calculated
105
+ def calculate(settings = {})
106
+ proposal_settings = generate_proposal_settings(settings)
107
+
108
+ @proposal = Y2Storage::GuidedProposal.initial(
109
+ settings: proposal_settings,
110
+ devicegraph: probed_devicegraph,
111
+ disk_analyzer: disk_analyzer
112
+ )
113
+ save
114
+ changed!
115
+
116
+ !proposal.failed?
117
+ end
118
+
119
+ # Storage actions manager
120
+ #
121
+ # @fixme this method should directly return the actions
122
+ #
123
+ # @return [Storage::Actions]
124
+ def actions
125
+ # FIXME: this class could receive the storage manager instance
126
+ @actions ||= Actions.new(logger)
127
+ end
128
+
129
+ private
130
+
131
+ # @return [Logger]
132
+ attr_reader :logger
133
+
134
+ # @return [Config]
135
+ attr_reader :config
136
+
137
+ # @return [Y2Storage::InitialGuidedProposal]
138
+ attr_reader :proposal
139
+
140
+ # Generates proposal settings from the given values
141
+ #
142
+ # @param settings [Hash]
143
+ # @return [Y2Storage::ProposalSettings]
144
+ def generate_proposal_settings(settings)
145
+ proposal_settings = Y2Storage::ProposalSettings.new_for_current_product
146
+
147
+ config_volumes = read_config_volumes
148
+ # If no volumes are specified, just leave the default ones (hardcoded at Y2Storage)
149
+ proposal_settings.volumes = config_volumes unless config_volumes.empty?
150
+
151
+ settings.each { |k, v| proposal_settings.public_send("#{k}=", v) }
152
+
153
+ proposal_settings
154
+ end
155
+
156
+ # Reads the list of volumes from the D-Installer configuration
157
+ #
158
+ # @return [Array<Y2Storage::VolumeSpecification>]
159
+ def read_config_volumes
160
+ vols = config.data.fetch("storage", {}).fetch("volumes", [])
161
+ vols.map { |v| Y2Storage::VolumeSpecification.new(v) }
162
+ end
163
+
164
+ # Saves the proposal or restores initial devices if a proposal was not calculated
165
+ def save
166
+ if proposal.failed?
167
+ storage_manager.staging = probed_devicegraph.dup
168
+ else
169
+ storage_manager.proposal = proposal
170
+ end
171
+ end
172
+
173
+ # @return [Y2Storage::DiskAnalyzer]
174
+ def disk_analyzer
175
+ storage_manager.probed_disk_analyzer
176
+ end
177
+
178
+ # Helper to generate a disk label
179
+ #
180
+ # @return [Y2Storage::Dialogs::GuidedSetup::Helpers::Disk]
181
+ def disk_helper
182
+ @disk_helper ||= Y2Storage::Dialogs::GuidedSetup::Helpers::Disk.new(disk_analyzer)
183
+ end
184
+
185
+ # Devicegraph representing the system
186
+ #
187
+ # @return [Y2Storage::Devicegraph]
188
+ def probed_devicegraph
189
+ storage_manager.probed
190
+ end
191
+
192
+ def storage_manager
193
+ Y2Storage::StorageManager.instance
194
+ end
195
+ end
196
+ end
197
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) [2022] SUSE LLC
4
+ #
5
+ # All Rights Reserved.
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify it
8
+ # under the terms of version 2 of the GNU General Public License as published
9
+ # by the Free Software Foundation.
10
+ #
11
+ # This program is distributed in the hope that it will be useful, but WITHOUT
12
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14
+ # more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License along
17
+ # with this program; if not, contact SUSE LLC.
18
+ #
19
+ # To contact SUSE LLC about this file by physical or electronic mail, you may
20
+ # find current contact information at www.suse.com.
21
+
22
+ module DInstaller
23
+ # Namespace for storage backend
24
+ module Storage
25
+ end
26
+ end
27
+
28
+ require "dinstaller/storage/manager"
29
+ require "dinstaller/storage/proposal"
30
+ require "dinstaller/storage/actions"