mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 08:58:59 +00:00
Use the first address if cannot connect to any
This fixes #39995. The previous work happened in #39289.
This commit is contained in:
parent
116201f345
commit
af1545deed
@ -133,7 +133,7 @@ log = logging.getLogger(__name__)
|
|||||||
# 6. Handle publications
|
# 6. Handle publications
|
||||||
|
|
||||||
|
|
||||||
def resolve_dns(opts, fallback=True, connect=True):
|
def resolve_dns(opts, fallback=True):
|
||||||
'''
|
'''
|
||||||
Resolves the master_ip and master_uri options
|
Resolves the master_ip and master_uri options
|
||||||
'''
|
'''
|
||||||
@ -150,7 +150,7 @@ def resolve_dns(opts, fallback=True, connect=True):
|
|||||||
if opts['master'] == '':
|
if opts['master'] == '':
|
||||||
raise SaltSystemExit
|
raise SaltSystemExit
|
||||||
ret['master_ip'] = \
|
ret['master_ip'] = \
|
||||||
salt.utils.dns_check(opts['master'], opts['master_port'], True, opts['ipv6'], connect)
|
salt.utils.dns_check(opts['master'], opts['master_port'], True, opts['ipv6'])
|
||||||
except SaltClientError:
|
except SaltClientError:
|
||||||
if opts['retry_dns']:
|
if opts['retry_dns']:
|
||||||
while True:
|
while True:
|
||||||
@ -164,7 +164,7 @@ def resolve_dns(opts, fallback=True, connect=True):
|
|||||||
time.sleep(opts['retry_dns'])
|
time.sleep(opts['retry_dns'])
|
||||||
try:
|
try:
|
||||||
ret['master_ip'] = salt.utils.dns_check(
|
ret['master_ip'] = salt.utils.dns_check(
|
||||||
opts['master'], opts['master_port'], True, opts['ipv6'], connect
|
opts['master'], opts['master_port'], True, opts['ipv6']
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
except SaltClientError:
|
except SaltClientError:
|
||||||
|
@ -716,11 +716,12 @@ def ip_bracket(addr):
|
|||||||
return addr
|
return addr
|
||||||
|
|
||||||
|
|
||||||
def dns_check(addr, port, safe=False, ipv6=None, connect=True):
|
def dns_check(addr, port, safe=False, ipv6=None):
|
||||||
'''
|
'''
|
||||||
Return the ip resolved by dns, but do not exit on failure, only raise an
|
Return the ip resolved by dns, but do not exit on failure, only raise an
|
||||||
exception. Obeys system preference for IPv4/6 address resolution.
|
exception. Obeys system preference for IPv4/6 address resolution.
|
||||||
Tries to connect to the address before considering it useful.
|
Tries to connect to the address before considering it useful. If no address
|
||||||
|
can be reached, the first one resolved is used as a fallback.
|
||||||
'''
|
'''
|
||||||
error = False
|
error = False
|
||||||
try:
|
try:
|
||||||
@ -734,18 +735,21 @@ def dns_check(addr, port, safe=False, ipv6=None, connect=True):
|
|||||||
error = True
|
error = True
|
||||||
else:
|
else:
|
||||||
resolved = False
|
resolved = False
|
||||||
|
candidates = []
|
||||||
for h in hostnames:
|
for h in hostnames:
|
||||||
|
# It's an IP address, just return it
|
||||||
|
if h[4][0] == addr:
|
||||||
|
resolved = addr
|
||||||
|
break
|
||||||
|
|
||||||
if h[0] == socket.AF_INET and ipv6 is True:
|
if h[0] == socket.AF_INET and ipv6 is True:
|
||||||
continue
|
continue
|
||||||
if h[0] == socket.AF_INET6 and ipv6 is False:
|
if h[0] == socket.AF_INET6 and ipv6 is False:
|
||||||
continue
|
continue
|
||||||
if h[0] == socket.AF_INET6 and connect is False and ipv6 is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
candidate_addr = ip_bracket(h[4][0])
|
candidate_addr = ip_bracket(h[4][0])
|
||||||
|
if h[0] != socket.AF_INET6 or ipv6 is not None:
|
||||||
if not connect:
|
candidates.append(candidate_addr)
|
||||||
resolved = candidate_addr
|
|
||||||
|
|
||||||
s = socket.socket(h[0], socket.SOCK_STREAM)
|
s = socket.socket(h[0], socket.SOCK_STREAM)
|
||||||
try:
|
try:
|
||||||
@ -757,7 +761,10 @@ def dns_check(addr, port, safe=False, ipv6=None, connect=True):
|
|||||||
except socket.error:
|
except socket.error:
|
||||||
pass
|
pass
|
||||||
if not resolved:
|
if not resolved:
|
||||||
error = True
|
if len(candidates) > 0:
|
||||||
|
resolved = candidates[0]
|
||||||
|
else:
|
||||||
|
error = True
|
||||||
except TypeError:
|
except TypeError:
|
||||||
err = ('Attempt to resolve address \'{0}\' failed. Invalid or unresolveable address').format(addr)
|
err = ('Attempt to resolve address \'{0}\' failed. Invalid or unresolveable address').format(addr)
|
||||||
raise SaltSystemExit(code=42, msg=err)
|
raise SaltSystemExit(code=42, msg=err)
|
||||||
|
@ -364,7 +364,7 @@ class ConfigTestCase(TestCase, integration.AdaptedConfigurationTestCaseMixIn):
|
|||||||
syndic_opts = sconfig.syndic_config(
|
syndic_opts = sconfig.syndic_config(
|
||||||
syndic_conf_path, minion_conf_path
|
syndic_conf_path, minion_conf_path
|
||||||
)
|
)
|
||||||
syndic_opts.update(salt.minion.resolve_dns(syndic_opts, connect=False))
|
syndic_opts.update(salt.minion.resolve_dns(syndic_opts))
|
||||||
root_dir = syndic_opts['root_dir']
|
root_dir = syndic_opts['root_dir']
|
||||||
# id & pki dir are shared & so configured on the minion side
|
# id & pki dir are shared & so configured on the minion side
|
||||||
self.assertEqual(syndic_opts['id'], 'minion')
|
self.assertEqual(syndic_opts['id'], 'minion')
|
||||||
|
Loading…
Reference in New Issue
Block a user