Add ability to select to prefer IPv4 addresses for ansible_ssh_host (#35584)
Currently Cloudforms can return a mix of IPv4 and IPv6 addresses in the ipaddresses field and this mix comes in a "random" order (that is the first entry may be IPv4 sometimes but IPv6 other times). If you wish to always use IPv4 for the ansible_ssh_host value then this is problematic. This change adds a new prefer_ipv4 flag which will look for the first IPv4 address in the ipaddresses list and uses that instead of just the first entry.
This commit is contained in:
parent
fe067040d1
commit
7dbcf752c8
2 changed files with 17 additions and 1 deletions
|
@ -31,6 +31,9 @@ nest_tags = False
|
|||
# Note: This suffix *must* include the leading '.' as it is appended to the hostname as is
|
||||
# suffix = .example.org
|
||||
|
||||
# If true, will try and use an IPv4 address for the ansible_ssh_host rather than just the first IP address in the list
|
||||
prefer_ipv4 = False
|
||||
|
||||
[cache]
|
||||
|
||||
# Maximum time to trust the cache in seconds
|
||||
|
|
|
@ -182,6 +182,11 @@ class CloudFormsInventory(object):
|
|||
else:
|
||||
self.cloudforms_suffix = None
|
||||
|
||||
if config.has_option('cloudforms', 'prefer_ipv4'):
|
||||
self.cloudforms_prefer_ipv4 = config.getboolean('cloudforms', 'prefer_ipv4')
|
||||
else:
|
||||
self.cloudforms_prefer_ipv4 = False
|
||||
|
||||
# Ansible related
|
||||
try:
|
||||
group_patterns = config.get('ansible', 'group_patterns')
|
||||
|
@ -362,7 +367,15 @@ class CloudFormsInventory(object):
|
|||
|
||||
# Set ansible_ssh_host to the first available ip address
|
||||
if 'ipaddresses' in host and host['ipaddresses'] and isinstance(host['ipaddresses'], list):
|
||||
host['ansible_ssh_host'] = host['ipaddresses'][0]
|
||||
# If no preference for IPv4, just use the first entry
|
||||
if not self.cloudforms_prefer_ipv4:
|
||||
host['ansible_ssh_host'] = host['ipaddresses'][0]
|
||||
else:
|
||||
# Before we search for an IPv4 address, set using the first entry in case we don't find any
|
||||
host['ansible_ssh_host'] = host['ipaddresses'][0]
|
||||
for currenthost in host['ipaddresses']:
|
||||
if '.' in currenthost:
|
||||
host['ansible_ssh_host'] = currenthost
|
||||
|
||||
# Create additional groups
|
||||
for key in ('location', 'type', 'vendor'):
|
||||
|
|
Loading…
Reference in a new issue