1
1
module RbProxy
2
2
module Helpers
3
+ require 'resolv'
4
+
3
5
def read_hosts_file
4
6
hosts_hash = Hash . new { |hash , key | hash [ key ] = [ ] }
5
7
File . readlines ( '/etc/hosts' ) . each do |line |
@@ -13,9 +15,15 @@ def read_hosts_file
13
15
end
14
16
15
17
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
19
27
20
28
running_services = node [ 'redborder' ] [ 'systemdservices' ] . values . flatten if node [ 'redborder' ] [ 'systemdservices' ]
21
29
databags = Chef ::DataBag . load ( 'rBglobal' ) . keys . grep ( /^ipvirtual-external-/ ) . map { |bag | bag . sub ( 'ipvirtual-external-' , '' ) }
@@ -53,5 +61,16 @@ def update_hosts_file
53
61
end
54
62
hosts_entries
55
63
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
56
75
end
57
76
end
0 commit comments