ansible_module_dig
ansible-module-dig
ansible-module-dig
is a custom Ansible module allowing you to run DNS
lookup operations from remote Ansible hosts, and returns a list of the resolved
IP(v4) addresses per name. The dig
module may also be configured to parse the hosts'
/etc/hosts
file before performing any lookup operation.
This module can thus be used to both:
- resolve one or multiple hostname(s);
- assert whether or not one or multiple hostname(s) can be resolved (module will fail if a hostname cannot be resolved to at least one address).
dig
module vs. Ansible lookup('dig', ... )
Make sure to know what you're doing before using this module! The official way for running DNS lookups in Ansible is by using the dig
lookup.
Main issue using lookup filters, like all templating, is that it is evaluated on the Ansible control machine, and not the targeted host. This could cause unexpected side effects when running your Ansible plays in complex networking environments or deployment scenarios, where your control machine can resolve all hosts of your cluster, but hosts cannot (e.g., running your configuration plays through an external management network or in offline or highly secured network environments).
This Ansible dig
module fills this gap by executing lookups from the
remote hosts directly.
Getting started
Requirements
The below requirements are needed on the host that execute this module.
dnspython
for Python.
Installing
The "Ansible role" way
- Clone this repository to your Ansible
role_path
, or install viaansible-galaxy
;ansible-galaxy install alexisfacques.ansible_module_dig
- Import the role in your playbooks before running any role or task that require the
dig
module:- hosts: all roles: - alexisfacques.ansible_module_dig tasks: - name: Ensure google.com can be resolved dig: qtype: A name: google.com register: dig_result
The "Ansible library" way
Alternatively, if importing a role is too much of a hassle, you can store this
module in the library
directory defined in your ansible.cfg
file
(Default is a sub-directory called library
in the directory that contains
your playbooks):
[defaults]
library = /path/to/your/library
Usage
Parameters
Parameter | Choices/Defaults | Comments |
---|---|---|
qtype |
Default: A |
Indicates what type of query is required: ANY, A, MX, SIG... Type can be any valid query type. |
name - string | list / required |
The name(s) of the resource(s) that is to be looked up. | |
nameserver - string | list |
The name(s) or IPv4 address(es) of nameserver(s) to use. | |
with_etc_hosts | Choice: true false Default: true |
Whether or not the module should try to resolve the name using the host's /etc/hosts file(s) prior to running any lookup operation. |
Return values
Key | Returned | Description |
---|---|---|
addresses | On success if all names have been resolved to at least 1 IPv4 address. | A 2D array of IPv4 addresses to each of the looked up name. |
Example of use
Examples of use can be found here.
Acknowlegments
License
This project is licensed under the MIT License - see the LICENSE file for details.
DNS lookups in Ansble (on remote host) made easy.
ansible-galaxy install alexisfacques/ansible-module-dig