Project

General

Profile

Download (1.7 KB) Statistics
| Branch: | Tag: | Revision:
module PxeLoaderSupport
extend ActiveSupport::Concern

PXE_KINDS = {
:PXELinux => /^(pxelinux|PXELinux).*/,
:PXEGrub => /^(grub\/|Grub ).*/,
:PXEGrub2 => /^(grub2|Grub2).*/
}.with_indifferent_access.freeze

# preference order is defined in Operatingsystem#template_kinds
PREFERRED_KINDS = {
:PXELinux => "PXELinux BIOS",
:PXEGrub2 => "Grub2 UEFI",
: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",
"Grub UEFI" => "grub/grub#{precision}.efi",
"Grub2 UEFI" => "grub2/grub#{precision}.efi",
"Grub2 UEFI SecureBoot" => "grub2/shim#{precision}.efi"
}.freeze
end

def all_loaders
all_loaders_map.keys.freeze
end

def valid_loader_name?(pxe_loader)
self.all_loaders.include?(pxe_loader)
end

def firmware_type(pxe_loader)
case pxe_loader
when 'None'
:none
when /UEFI/
:uefi
else
:bios
end
end
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
(34-34/46)