diff --git a/src/lib/bootloader/autoyast_converter.rb b/src/lib/bootloader/autoyast_converter.rb index cdcf24799..07f908ede 100644 --- a/src/lib/bootloader/autoyast_converter.rb +++ b/src/lib/bootloader/autoyast_converter.rb @@ -3,6 +3,7 @@ require "bootloader/bootloader_factory" Yast.import "BootStorage" +Yast.import "Arch" module Bootloader # Represents unsupported bootloader type error @@ -32,6 +33,7 @@ def import(data) import_grub2(data, bootloader) import_stage1(data, bootloader) import_default(data, bootloader.grub_default) + import_device_map(data, bootloader) # TODO: import Initrd log.warn "autoyast profile contain sections which won't be processed" if data["sections"] @@ -106,6 +108,19 @@ def import_timeout(data, default) end end + def import_device_map(data, bootloader) + return unless bootloader.name == "grub2" + return if !Yast::Arch.x86_64 && !Yast::Arch.i386 + + dev_map = data["device_map"] + return unless dev_map + + bootloader.device_map.clear_mapping + dev_map.each do |entry| + bootloader.device_map.add_mapping(entry["firmware"], entry["linux"]) + end + end + STAGE1_DEVICES_MAPPING = { "boot_root" => :RootPartitionDevice, "boot_boot" => :BootPartitionDevice, diff --git a/src/lib/bootloader/device_map.rb b/src/lib/bootloader/device_map.rb index 033418eab..a05102dca 100644 --- a/src/lib/bootloader/device_map.rb +++ b/src/lib/bootloader/device_map.rb @@ -33,6 +33,7 @@ def read end def write + log.info "writting device map: #{to_s}" @model.save end diff --git a/test/autoyast_converter_test.rb b/test/autoyast_converter_test.rb index f0db8c833..7bec84593 100644 --- a/test/autoyast_converter_test.rb +++ b/test/autoyast_converter_test.rb @@ -3,6 +3,8 @@ require "bootloader/autoyast_converter" require "bootloader/grub2" +Yast.import "Arch" + describe Bootloader::AutoyastConverter do subject { described_class } @@ -63,6 +65,21 @@ expect(bootloader.trusted_boot).to eq true end + it "imports device map for grub2 on intel architecture" do + allow(Yast::Arch).to receive(:architecture).and_return("x86_64") + data = { + "loader_type" => "grub2", + "device_map" => [ + {"firmware" => "hd0", "linux" => "/dev/vda"}, + {"firmware" => "hd1", "linux" => "/dev/vdb"} + ] + } + + bootloader = subject.import(data) + expect(bootloader.device_map.system_device_for("hd0")).to eq "/dev/vda" + expect(bootloader.device_map.system_device_for("hd1")).to eq "/dev/vdb" + end + it "supports SLE9 format" do data = { "activate" => "true",