Skip to content

Commit

Permalink
GuidedProposal: setting to disable configuration of boot partitions
Browse files Browse the repository at this point in the history
  • Loading branch information
ancorgs committed Mar 21, 2024
1 parent 92516eb commit 927c4d9
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 1 deletion.
2 changes: 2 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
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
9 changes: 9 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
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 927c4d9

Please sign in to comment.