From 2707fabd3aaba3219714ab8b3c48dc634a6bd978 Mon Sep 17 00:00:00 2001
From: Alexander Olofsson <alexander.olofsson@liu.se>
Date: Fri, 23 Jul 2021 09:37:59 +0200
Subject: [PATCH] Support nextserver names if DHCP supports them

---
 app/models/concerns/foreman_wds/nic_extensions.rb | 5 ++++-
 app/models/wds_server.rb                          | 6 +++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/app/models/concerns/foreman_wds/nic_extensions.rb b/app/models/concerns/foreman_wds/nic_extensions.rb
index 5487ddf..abc8345 100644
--- a/app/models/concerns/foreman_wds/nic_extensions.rb
+++ b/app/models/concerns/foreman_wds/nic_extensions.rb
@@ -10,7 +10,10 @@ module ForemanWds
     def boot_server
       return super if host.nil? || !host.wds? || host.wds_facet.nil?
 
-      return host.wds_server.next_server_ip if host.build? # TODO: Support choosing local boot method
+      if host.build? # TODO: Support choosing local boot method
+        return host.wds_server.next_server_ip unless subnet.dhcp.has_capability?(:DHCP, :dhcp_filename_hostname)
+        return host.wds_server.next_server_name
+      end
 
       super
     end
diff --git a/app/models/wds_server.rb b/app/models/wds_server.rb
index 835735f..33df3c5 100644
--- a/app/models/wds_server.rb
+++ b/app/models/wds_server.rb
@@ -110,8 +110,12 @@ class WdsServer < ApplicationRecord
     end
   end
 
+  def next_server_name
+    URI(url).host
+  end
+
   def next_server_ip
-    res = Resolv::DNS.open { |dns| dns.getaddresses(URI(url).host) }.select { |addr| addr.is_a? Resolv::IPv4 }.first
+    res = Resolv::DNS.open { |dns| dns.getaddresses(next_server_name) }.select { |addr| addr.is_a? Resolv::IPv4 }.first
     return res.to_s if res
 
     IPSocket.getaddress URI(url).host
-- 
GitLab