Skip to content

Commit

Permalink
Merge pull request #1376 from ancorgs/agama_settings_fixed
Browse files Browse the repository at this point in the history
GuidedProposal: internal settings to be used by Agama
  • Loading branch information
ancorgs committed Mar 22, 2024
2 parents 92516eb + 134a16d commit 123b26f
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 2 deletions.
8 changes: 8 additions & 0 deletions package/yast2-storage-ng.changes
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
-------------------------------------------------------------------
Thu Mar 21 12:28:56 UTC 2024 - Ancor Gonzalez Sosa <ancor@suse.com>

- GuidedProposal: internal settings to control the configuration
of boot-related partitions and the usage of adjust_by_ram.
- Needed for gh#openSUSE/agama#1111
- 5.0.10

-------------------------------------------------------------------
Tue Mar 12 13:57:30 UTC 2024 - Stefan Hundhammer <shundhammer@suse.com>

Expand Down
2 changes: 1 addition & 1 deletion package/yast2-storage-ng.spec
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#

Name: yast2-storage-ng
Version: 5.0.9
Version: 5.0.10
Release: 0
Summary: YaST2 - Storage Configuration
License: GPL-2.0-only OR GPL-3.0-only
Expand Down
4 changes: 4 additions & 0 deletions src/lib/y2storage/proposal/devices_planner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ def volumes_planned_devices(target, devicegraph)
# @param devicegraph [Devicegraph]
# @return [Array<Planned::Device>]
def add_boot_devices(devices, target, devicegraph)
return unless settings.boot

@target = target
devices.unshift(*planned_boot_devices(devices, devicegraph))
remove_shadowed_subvolumes(devices)
Expand Down Expand Up @@ -285,6 +287,8 @@ def adjust_sizes(planned_device, volume)
planned_device.min_size = min_size(volume)
planned_device.max_size = max_size(volume)

return if volume.ignore_adjust_by_ram?

if volume.adjust_by_ram?
planned_device.min_size = [planned_device.min_size, ram_size].max
planned_device.max_size = [planned_device.max_size, ram_size].max
Expand Down
7 changes: 6 additions & 1 deletion src/lib/y2storage/proposal_settings.rb
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,10 @@ def candidate_devices=(devices)
alias_method :lvm, :use_lvm
alias_method :lvm=, :use_lvm=

# @return [Boolean] whether the proposal should automatically configure any partition
# possibly needed for booting the system.
attr_accessor :boot

# @return [ProposalSpaceSettings]
attr_reader :space_settings

Expand Down Expand Up @@ -313,7 +317,7 @@ def lvm_vg_strategy=(strategy)
# List of all the supported settings
SETTINGS = [
:multidisk_first, :root_device, :explicit_root_device,
:candidate_devices, :explicit_candidate_devices,
:candidate_devices, :explicit_candidate_devices, :boot,
:windows_delete_mode, :linux_delete_mode, :other_delete_mode, :resize_windows,
:delete_resize_configurable,
:lvm, :separate_vgs, :allocate_volume_mode, :lvm_vg_strategy, :lvm_vg_size
Expand Down Expand Up @@ -389,6 +393,7 @@ def root_volume
# Defaults when a setting is not specified
DEFAULTS = {
allocate_volume_mode: :auto,
boot: true,
delete_resize_configurable: true,
linux_delete_mode: :ondemand,
lvm: false,
Expand Down
7 changes: 7 additions & 0 deletions src/lib/y2storage/volume_specification.rb
Original file line number Diff line number Diff line change
Expand Up @@ -177,10 +177,16 @@ class VolumeSpecification
# @return [Boolean] true if #snapshots_size and #snapshots_percentage should be ignored
attr_accessor :ignore_snapshots_sizes

# Whether to ignore any possible effect on the size derived from RAM size
#
# @return [Boolean] true if #adjust_by_ram should be ignored
attr_accessor :ignore_adjust_by_ram

alias_method :proposed?, :proposed
alias_method :proposed_configurable?, :proposed_configurable
alias_method :adjust_by_ram?, :adjust_by_ram
alias_method :adjust_by_ram_configurable?, :adjust_by_ram_configurable
alias_method :ignore_adjust_by_ram?, :ignore_adjust_by_ram
alias_method :snapshots?, :snapshots
alias_method :snapshots_configurable?, :snapshots_configurable
alias_method :ignore_snapshots_sizes?, :ignore_snapshots_sizes
Expand Down Expand Up @@ -380,6 +386,7 @@ def apply_defaults
@fs_types = []
@ignore_fallback_sizes = false
@ignore_snapshots_sizes = false
@ignore_adjust_by_ram = false
@reformat = true
end

Expand Down
15 changes: 15 additions & 0 deletions test/y2storage/proposal/devices_planner_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,15 @@
)
end

context "if ProposalSettings#boot is set to false" do
before { settings.boot = false }

it "does not include the partitions needed by BootRequirementChecker" do
mount_points = subject.planned_devices(:desired, devicegraph).map(&:mount_point)
expect(mount_points).to_not include("/one_boot", "/other_boot")
end
end

context "when a volume is specified in <volumes> section" do
let(:volumes) { [volume] }

Expand Down Expand Up @@ -463,6 +472,12 @@
expect(planned_device.min_size).to eq(8.GiB)
expect(planned_device.max_size).to eq(8.GiB)
end

it "does not extend the sizes to ram size if #ignore_adjust_by_ram is set" do
vol_in_settings.ignore_adjust_by_ram = true
expect(planned_device.min_size).to eq(1.GiB)
expect(planned_device.max_size).to eq(2.GiB)
end
end

context "when it is planning a device with btrfs filesystem" do
Expand Down
95 changes: 95 additions & 0 deletions test/y2storage/proposal_agama_boot_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
#!/usr/bin/env rspec

# Copyright (c) [2024] SUSE LLC
#
# All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of version 2 of the GNU General Public License as published
# by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, contact SUSE LLC.
#
# To contact SUSE LLC about this file by physical or electronic mail, you may
# find current contact information at www.suse.com.

require_relative "spec_helper"
require "storage"
require "y2storage"
require_relative "#{TEST_PATH}/support/proposal_examples"
require_relative "#{TEST_PATH}/support/proposal_context"

describe Y2Storage::MinGuidedProposal do
describe "#propose with settings in the Agama style" do
subject(:proposal) { described_class.new(settings: settings) }

include_context "proposal"
let(:scenario) { "empty_hard_disk_gpt_50GiB" }
let(:architecture) { :x86 }
let(:settings_format) { :ng }
let(:control_file_content) { { "partitioning" => { "volumes" => volumes } } }
let(:volumes) { [{ "mount_point" => "/", "fs_type" => "xfs", "min_size" => "10 GiB" }] }

before do
# Speed-up things by avoiding calls to hwinfo
allow_any_instance_of(Y2Storage::Disk).to receive(:hwinfo).and_return(Y2Storage::HWInfoDisk.new)

settings.candidate_devices = ["/dev/sda"]
settings.root_device = "/dev/sda"

allow(storage_arch).to receive(:efiboot?).and_return(efi)
end

context "in an EFI system" do
let(:efi) { true }

it "creates an ESP partition" do
proposal.propose
mount_points = proposal.devices.mount_points.map(&:path)
expect(proposal.devices.partitions.size).to eq 2
expect(mount_points).to contain_exactly("/boot/efi", "/")
end

context "if ProposalSettings#boot is set to false" do
before { settings.boot = false }

it "does not create any extra partition for booting" do
proposal.propose
mount_points = proposal.devices.mount_points.map(&:path)
expect(proposal.devices.partitions.size).to eq 1
expect(mount_points).to contain_exactly("/")
end
end
end

context "in an legacy x86 system" do
let(:efi) { false }

it "creates a bios boot partition" do
proposal.propose
partitions = proposal.devices.partitions
expect(partitions.size).to eq 2
expect(partitions.map(&:id)).to contain_exactly(
Y2Storage::PartitionId::BIOS_BOOT, Y2Storage::PartitionId::LINUX
)
end

context "if ProposalSettings#boot is set to false" do
before { settings.boot = false }

it "does not create any extra partition for booting" do
proposal.propose
partitions = proposal.devices.partitions
expect(partitions.size).to eq 1
expect(partitions.first.id.to_sym).to eq :linux
end
end
end
end
end

0 comments on commit 123b26f

Please sign in to comment.