By Erika Heidi
Developer Advocate
By default, before executing the set of tasks defined in a playbook, Ansible will take a few moments to gather information about the systems that are being provisioned. This information, referred to as facts, contain details such as network interfaces and addresses, the operating system running on remote nodes, and available memory, among other things.
Ansible stores facts in JSON format, with items grouped in nodes. To check what kind of information is available for the systems you’re provisioning, you can run the setup
module with an ad hoc command:
- ansible all -i inventory -m setup -u sammy
This command will output an extensive JSON containing information about your server. To obtain a subset of that data, you can use the filter
parameter and provide a pattern. For instance, if you’d like to obtain information about all IPv4 addresses in the remote nodes, you can use the following command:
- ansible all -i inventory -m setup -a "filter=*ipv4*" -u sammy
You’ll see output like this:
Output203.0.113.10 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"203.0.113.10",
"198.51.100.23"
],
"ansible_default_ipv4": {
"address": "203.0.113.10",
"alias": "eth0",
"broadcast": "203.0.113.255",
"gateway": "203.0.113.1",
"interface": "eth0",
"macaddress": "06:c7:91:16:2e:b7",
"mtu": 1500,
"netmask": "203.0.113.0",
"network": "203.0.113.0",
"type": "ether"
}
},
"changed": false
}
Once you have found the facts that will be useful for your play, you can update your playbook accordingly. As an example, the following playbook will print out the IPv4 address of the default network interface. From the previous command output, we can see that this value is available through ansible_default_ipv4.address
in the JSON provided by Ansible.
Create a new file called playbook-03.yml
in your ansible-practice
directory:
- nano ~/ansible-practice/playbook-03.yml
Then add the following lines to the new playbook file:
---
- hosts: all
tasks:
- name: print facts
debug:
msg: "IPv4 address: {{ ansible_default_ipv4.address }}"
Save and close the file when you’re done.
To try this playbook on servers from your inventory file, run ansible-playbook
with the same connection arguments you’ve used before when running our first example. Again, we’ll be using an inventory file named inventory
and the sammy user to connect to the remote servers:
- ansible-playbook -i inventory playbook-03.yml -u sammy
When you run the playbook, you’ll see your remote server’s IPv4 address in the output as expected:
Output...
TASK [print facts] ***************************************************************************************************************************************************************************
ok: [server1] => {
"msg": "IPv4 address: 203.0.113.10"
}
...
Facts encapsulate important data that you can leverage to better customize your playbooks. To learn more about all the information you can obtain through facts, please refer to the official Ansible documentation.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
Ansible is a modern configuration management tool that doesn’t require the use of an agent software on remote nodes, using only SSH and Python to communicate and execute commands on managed servers. This series will walk you through the main Ansible features that you can use to write playbooks for server automation. At the end, we’ll see a practical example of how to create a playbook to automate setting up a remote Nginx web server and deploy a static HTML website to it.
Browse Series: 11 tutorials
Dev/Ops passionate about open source, PHP, and Linux. Former Senior Technical Writer at DigitalOcean. Areas of expertise include LAMP Stack, Ubuntu, Debian 11, Linux, Ansible, and more.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Full documentation for every DigitalOcean product.
The Wave has everything you need to know about building a business, from raising funding to marketing your product.
Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.
New accounts only. By submitting your email you agree to our Privacy Policy
Scale up as you grow — whether you're running one virtual machine or ten thousand.
Sign up and get $200 in credit for your first 60 days with DigitalOcean.*
*This promotional offer applies to new accounts only.