foreman/app/models/concerns/pxe_loader_support.rb @ b7fc06c4
4cbf879e | Lukas Zapletal | module PxeLoaderSupport
|
|
extend ActiveSupport::Concern
|
|||
PXE_KINDS = {
|
|||
:PXELinux => /^(pxelinux|PXELinux).*/,
|
|||
:PXEGrub => /^(grub\/|Grub ).*/,
|
|||
:PXEGrub2 => /^(grub2|Grub2).*/
|
|||
}.with_indifferent_access.freeze
|
|||
b7fc06c4 | Lukas Zapletal | # preference order is defined in Operatingsystem#template_kinds
|
|
4cbf879e | Lukas Zapletal | PREFERRED_KINDS = {
|
|
:PXELinux => "PXELinux BIOS",
|
|||
b7fc06c4 | Lukas Zapletal | :PXEGrub2 => "Grub2 UEFI",
|
|
4cbf879e | Lukas Zapletal | :PXEGrub => "Grub UEFI"
|
|
}.with_indifferent_access.freeze
|
|||
class_methods do
|
|||
def all_loaders_map(precision = 'x64')
|
|||
{
|
|||
"None" => "",
|
|||
"PXELinux BIOS" => "pxelinux.0",
|
|||
"PXELinux UEFI" => "pxelinux.efi",
|
|||
8f7c12b3 | Lukáš Zapletal | "Grub UEFI" => "grub/grub#{precision}.efi",
|
|
4cbf879e | Lukas Zapletal | "Grub2 UEFI" => "grub2/grub#{precision}.efi",
|
|
8f7c12b3 | Lukáš Zapletal | "Grub2 UEFI SecureBoot" => "grub2/shim#{precision}.efi"
|
|
4cbf879e | Lukas Zapletal | }.freeze
|
|
end
|
|||
def all_loaders
|
|||
all_loaders_map.keys.freeze
|
|||
end
|
|||
def valid_loader_name?(pxe_loader)
|
|||
self.all_loaders.include?(pxe_loader)
|
|||
end
|
|||
a4fdab63 | Timo Goebel | ||
def firmware_type(pxe_loader)
|
|||
case pxe_loader
|
|||
when 'None'
|
|||
:none
|
|||
when /UEFI/
|
|||
:uefi
|
|||
else
|
|||
:bios
|
|||
end
|
|||
end
|
|||
4cbf879e | Lukas Zapletal | end
|
|
def default_boot_filename
|
|||
"pxelinux.0"
|
|||
end
|
|||
# Finds template kind for given loader filename or name or nil for "None" or ""
|
|||
def pxe_loader_kind(host)
|
|||
PXE_KINDS.find{|k, v| v.match(host.pxe_loader)}.try(:first).try(:to_sym)
|
|||
end
|
|||
# Suggested PXE loader when template kind is available (PXEGrub2, then PXELinux, then PXEGrub in this order)
|
|||
def preferred_loader
|
|||
associated_templates = os_default_templates.map(&:template_kind).compact.map(&:name)
|
|||
template_kinds.each do |loader|
|
|||
return PREFERRED_KINDS[loader] if associated_templates.include? loader
|
|||
end
|
|||
nil
|
|||
end
|
|||
end
|