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
|
# Note: This suffix *must* include the leading '.' as it is appended to the hostname as is
|
||||||
# suffix = .example.org
|
# 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]
|
[cache]
|
||||||
|
|
||||||
# Maximum time to trust the cache in seconds
|
# Maximum time to trust the cache in seconds
|
||||||
|
|
|
@ -182,6 +182,11 @@ class CloudFormsInventory(object):
|
||||||
else:
|
else:
|
||||||
self.cloudforms_suffix = None
|
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
|
# Ansible related
|
||||||
try:
|
try:
|
||||||
group_patterns = config.get('ansible', 'group_patterns')
|
group_patterns = config.get('ansible', 'group_patterns')
|
||||||
|
@ -362,7 +367,15 @@ class CloudFormsInventory(object):
|
||||||
|
|
||||||
# Set ansible_ssh_host to the first available ip address
|
# Set ansible_ssh_host to the first available ip address
|
||||||
if 'ipaddresses' in host and host['ipaddresses'] and isinstance(host['ipaddresses'], list):
|
if 'ipaddresses' in host and host['ipaddresses'] and isinstance(host['ipaddresses'], list):
|
||||||
|
# If no preference for IPv4, just use the first entry
|
||||||
|
if not self.cloudforms_prefer_ipv4:
|
||||||
host['ansible_ssh_host'] = host['ipaddresses'][0]
|
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
|
# Create additional groups
|
||||||
for key in ('location', 'type', 'vendor'):
|
for key in ('location', 'type', 'vendor'):
|
||||||
|
|
Loading…
Reference in a new issue