Skip to content

Commit ce0ba40

Browse files
authored
fix bug when registering with domain name (#66)
* fix bug when registering with domain name * only resolve once
1 parent ca8966a commit ce0ba40

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

resources/libraries/update_hosts_file.rb

+22-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module RbProxy
22
module Helpers
3+
require 'resolv'
4+
35
def read_hosts_file
46
hosts_hash = Hash.new { |hash, key| hash[key] = [] }
57
File.readlines('/etc/hosts').each do |line|
@@ -13,9 +15,15 @@ def read_hosts_file
1315
end
1416

1517
def update_hosts_file
16-
manager_registration_ip = node['redborder']['manager_registration_ip'] if node['redborder'] && node['redborder']['manager_registration_ip']
17-
18-
return unless manager_registration_ip
18+
unless node.dig('redborder', 'resolve_host')
19+
domain_name = node.dig('redborder', 'manager_registration_ip')
20+
return if domain_name.nil?
21+
resolved_ip = manager_to_ip(domain_name)
22+
return if resolved_ip.nil?
23+
node.normal['redborder']['resolve_host'] = resolved_ip
24+
end
25+
manager_registration_ip = node.dig('redborder', 'resolve_host')
26+
# Up until here, we resolved and stored the ip for /etc/hosts only if necessary
1927

2028
running_services = node['redborder']['systemdservices'].values.flatten if node['redborder']['systemdservices']
2129
databags = Chef::DataBag.load('rBglobal').keys.grep(/^ipvirtual-external-/).map { |bag| bag.sub('ipvirtual-external-', '') }
@@ -53,5 +61,16 @@ def update_hosts_file
5361
end
5462
hosts_entries
5563
end
64+
65+
def manager_to_ip(str)
66+
ipv4_regex = /\A(\d{1,3}\.){3}\d{1,3}\z/
67+
ipv6_regex = /\A(?:[A-Fa-f0-9]{1,4}:){7}[A-Fa-f0-9]{1,4}\z/
68+
dns_regex = /\A[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+\z/
69+
70+
return str if str.match?(ipv4_regex) || str.match?(ipv6_regex)
71+
return Resolv.getaddress(str).to_s if str.match?(dns_regex)
72+
73+
nil
74+
end
5675
end
5776
end

0 commit comments

Comments
 (0)