mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Add validity check for [Driver][IPAddress] else use docker-machine ip command. (#412)
* Add validity check for [Driver][IPAddress] else use docker-machine ip command. * Note why we fallback to the `docker-machine ip <machine name>` command. * Add changelog fragment. * Corrected module name in changelog fragment. Co-authored-by: Ben Roose <ben.roose@wichita.edu>
This commit is contained in:
parent
b00ee3b807
commit
3ff7a0baf2
2 changed files with 19 additions and 1 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- docker_machine - fallback to ip subcommand output if IPAddress is missing (https://github.com/ansible-collections/community.general/issues/412).
|
|
@ -176,6 +176,14 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
|
|
||||||
return json.loads(inspect_lines)
|
return json.loads(inspect_lines)
|
||||||
|
|
||||||
|
def _ip_addr_docker_machine_host(self, node):
|
||||||
|
try:
|
||||||
|
ip_addr = self._run_command(['ip', self.node])
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return ip_addr
|
||||||
|
|
||||||
def _should_skip_host(self, machine_name, env_var_tuples, daemon_env):
|
def _should_skip_host(self, machine_name, env_var_tuples, daemon_env):
|
||||||
if not env_var_tuples:
|
if not env_var_tuples:
|
||||||
warning_prefix = 'Unable to fetch Docker daemon env vars from Docker Machine for host {0}'.format(machine_name)
|
warning_prefix = 'Unable to fetch Docker daemon env vars from Docker Machine for host {0}'.format(machine_name)
|
||||||
|
@ -210,9 +218,17 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
# add an entry in the inventory for this host
|
# add an entry in the inventory for this host
|
||||||
self.inventory.add_host(machine_name)
|
self.inventory.add_host(machine_name)
|
||||||
|
|
||||||
|
# check for valid ip address from inspect output, else explicitly use ip command to find host ip address
|
||||||
|
# this works around an issue seen with Google Compute Platform where the IP address was not available
|
||||||
|
# via the 'inspect' subcommand but was via the 'ip' subcomannd.
|
||||||
|
if self.node_attrs['Driver']['IPAddress']:
|
||||||
|
ip_addr = self.node_attrs['Driver']['IPAddress']
|
||||||
|
else:
|
||||||
|
ip_addr = self._ip_addr_docker_machine_host(self.node)
|
||||||
|
|
||||||
# set standard Ansible remote host connection settings to details captured from `docker-machine`
|
# set standard Ansible remote host connection settings to details captured from `docker-machine`
|
||||||
# see: https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
|
# see: https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
|
||||||
self.inventory.set_variable(machine_name, 'ansible_host', self.node_attrs['Driver']['IPAddress'])
|
self.inventory.set_variable(machine_name, 'ansible_host', ip_addr)
|
||||||
self.inventory.set_variable(machine_name, 'ansible_port', self.node_attrs['Driver']['SSHPort'])
|
self.inventory.set_variable(machine_name, 'ansible_port', self.node_attrs['Driver']['SSHPort'])
|
||||||
self.inventory.set_variable(machine_name, 'ansible_user', self.node_attrs['Driver']['SSHUser'])
|
self.inventory.set_variable(machine_name, 'ansible_user', self.node_attrs['Driver']['SSHUser'])
|
||||||
self.inventory.set_variable(machine_name, 'ansible_ssh_private_key_file', self.node_attrs['Driver']['SSHKeyPath'])
|
self.inventory.set_variable(machine_name, 'ansible_ssh_private_key_file', self.node_attrs['Driver']['SSHKeyPath'])
|
||||||
|
|
Loading…
Reference in a new issue