diff --git a/app/models/concerns/foreman_wds/nic_extensions.rb b/app/models/concerns/foreman_wds/nic_extensions.rb index 5487ddfbedead376ca2172a1c006e201d85caff5..abc8345a8be1ee1b21fe23d213203631d7051669 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 835735ff1b928841a217eedd08bdd8de9271ac25..33df3c556a510d7a73239a6712242a2ab3aafaea 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