diff --git a/modules/tftp/server.rb b/modules/tftp/server.rb index 350cfc039..c68db2d01 100644 --- a/modules/tftp/server.rb +++ b/modules/tftp/server.rb @@ -73,7 +73,7 @@ def delete_dir(dir) end end - def setup_bootloader(mac, os, major, minor, arch) + def setup_bootloader(mac, os, major, minor, arch, build) end end @@ -134,30 +134,41 @@ def bootloader_path(os, version, arch) bootloader_path end - def setup_bootloader(mac, os, major, minor, arch) + def setup_bootloader(mac, os, major, minor, arch, build) pxeconfig_dir_mac = pxeconfig_dir(mac) - FileUtils.mkdir_p(pxeconfig_dir_mac) - version = "#{major}#{".#{minor}" unless minor.empty?}" - bootloader_path = bootloader_path(os, version, arch) + if build == "true" + logger.debug "TFTP: Host is in build mode." + logger.debug "TFTP: => Deploying host specific bootloader files to \"#{pxeconfig_dir_mac}\"" + + FileUtils.mkdir_p(pxeconfig_dir_mac) + + version = "#{major}#{".#{minor}" unless minor.empty?}" + bootloader_path = bootloader_path(os, version, arch) + + if bootloader_path + logger.debug "TFTP: Copying bootloader files from bootloader universe:" + logger.debug "TFTP: - \"#{bootloader_path}/*\" => \"#{pxeconfig_dir_mac}/\"" + FileUtils.cp_r("#{bootloader_path}/.", "#{pxeconfig_dir_mac}/", remove_destination: true) + else + logger.debug "TFTP: Copying default bootloader files:" + logger.debug "TFTP: - \"#{pxeconfig_dir}/grubx64.efi\" => \"#{pxeconfig_dir_mac}/grubx64.efi\"" + logger.debug "TFTP: - \"#{pxeconfig_dir}/shimx64.efi\" => \"#{pxeconfig_dir_mac}/shimx64.efi\"" + logger.debug "TFTP: - \"#{pxeconfig_dir}/grubx64.efi\" => \"#{pxeconfig_dir_mac}/boot.efi\"" + logger.debug "TFTP: - \"#{pxeconfig_dir}/shimx64.efi\" => \"#{pxeconfig_dir_mac}/boot-sb.efi\"" + FileUtils.cp_r("#{pxeconfig_dir}/grubx64.efi", "#{pxeconfig_dir_mac}/grubx64.efi", remove_destination: true) + FileUtils.cp_r("#{pxeconfig_dir}/shimx64.efi", "#{pxeconfig_dir_mac}/shimx64.efi", remove_destination: true) + FileUtils.cp_r("#{pxeconfig_dir}/grubx64.efi", "#{pxeconfig_dir_mac}/boot.efi", remove_destination: true) + FileUtils.cp_r("#{pxeconfig_dir}/shimx64.efi", "#{pxeconfig_dir_mac}/boot-sb.efi", remove_destination: true) + end - if bootloader_path - logger.debug "TFTP: Copying bootloader files from bootloader universe:" - logger.debug "TFTP: - \"#{bootloader_path}/*\" => \"#{pxeconfig_dir_mac}/\"" - FileUtils.cp_r("#{bootloader_path}/.", "#{pxeconfig_dir_mac}/", remove_destination: true) + File.write(File.join(pxeconfig_dir_mac, 'os_info'), "#{os} #{version} #{arch}") else - logger.debug "TFTP: Copying default bootloader files:" - logger.debug "TFTP: - \"#{pxeconfig_dir}/grubx64.efi\" => \"#{pxeconfig_dir_mac}/grubx64.efi\"" - logger.debug "TFTP: - \"#{pxeconfig_dir}/shimx64.efi\" => \"#{pxeconfig_dir_mac}/shimx64.efi\"" - logger.debug "TFTP: - \"#{pxeconfig_dir}/grubx64.efi\" => \"#{pxeconfig_dir_mac}/boot.efi\"" - logger.debug "TFTP: - \"#{pxeconfig_dir}/shimx64.efi\" => \"#{pxeconfig_dir_mac}/boot-sb.efi\"" - FileUtils.cp_r("#{pxeconfig_dir}/grubx64.efi", "#{pxeconfig_dir_mac}/grubx64.efi", remove_destination: true) - FileUtils.cp_r("#{pxeconfig_dir}/shimx64.efi", "#{pxeconfig_dir_mac}/shimx64.efi", remove_destination: true) - FileUtils.cp_r("#{pxeconfig_dir}/grubx64.efi", "#{pxeconfig_dir_mac}/boot.efi", remove_destination: true) - FileUtils.cp_r("#{pxeconfig_dir}/shimx64.efi", "#{pxeconfig_dir_mac}/boot-sb.efi", remove_destination: true) - end + logger.debug "TFTP: Host is not in build mode." + logger.debug "TFTP: => Removing host specific bootloader files from \"#{pxeconfig_dir_mac}\"" - File.write(File.join(pxeconfig_dir_mac, 'os_info'), "#{os} #{version} #{arch}") + FileUtils.rm_f(Dir.glob("#{pxeconfig_dir_mac}/*.efi")) + end end def del(mac) diff --git a/modules/tftp/tftp_api.rb b/modules/tftp/tftp_api.rb index 33f288a14..7e6655ce2 100644 --- a/modules/tftp/tftp_api.rb +++ b/modules/tftp/tftp_api.rb @@ -18,9 +18,9 @@ def instantiate(variant, mac = nil) Object.const_get("Proxy").const_get('TFTP').const_get(variant.capitalize).new end - def create(variant, mac, os, major, minor, arch) + def create(variant, mac, os, major, minor, arch, build) tftp = instantiate variant, mac - log_halt(400, "TFTP: Failed to setup target OS bootloader directory: ") { tftp.setup_bootloader(mac, os, major, minor, arch) } + log_halt(400, "TFTP: Failed to setup target OS bootloader directory: ") { tftp.setup_bootloader(mac, os, major, minor, arch, build) } log_halt(400, "TFTP: Failed to create pxe config file: ") { tftp.set(mac, (params[:pxeconfig] || params[:syslinux_config])) } end @@ -49,7 +49,7 @@ def create_default(variant) end post "/:variant/:mac" do |variant, mac| - create variant, mac, params[:targetos], params[:major], params[:minor], params[:arch] + create variant, mac, params[:targetos], params[:major], params[:minor], params[:arch], params[:build] end delete "/:variant/:mac" do |variant, mac| @@ -61,7 +61,7 @@ def create_default(variant) end post "/:mac" do |mac| - create "syslinux", mac, nil, nil, nil, nil + create "syslinux", mac, nil, nil, nil, nil, nil end delete("/:mac") do |mac|