1.6 KiB
1.6 KiB
Dynamic Inventory
Use dynamic inventory to fetch host information at runtime:
Example Usage
- name: Fetch hosts from external source
ansible.builtin.get_url:
url: "https://api.example.com/hosts"
dest: "hosts.json"
register: inventory_data
- name: Display inventory hosts
debug:
var: inventory_data.content
# Example dynamic inventory script (hosts.py):
# import json
# print(json.dumps({"hosts": ["web1", "web2"], "groups": {"webservers": ["web1", "web2"]}}))
Common Inventory Sources
-
EC2 Inventory:
- Uses AWS API to list instances
- Parameters:
aws_access_key_id,aws_secret_access_key,region - Example:
ansible-inventory --list --inventory=ec2.py
-
OpenStack Inventory:
- Connects to OpenStack neutron API
- Parameters:
auth_url,project_name,username,password - Example:
ansible-inventory --list --inventory=openstack.py
-
Custom Scripts:
- Write Python scripts to generate inventory
- Must output JSON in this format:
{ "hosts": ["host1", "host2"], "groups": { "webservers": ["host1", "host2"] } }
Best Practices
- Use
ansible-inventory --listto verify inventory structure - Test dynamic inventory with
--checkflag - Store credentials securely using Ansible Vault
- Combine with
--limitto target specific hosts/groups
Troubleshooting
Use --debug flag to see inventory resolution process:
ansible-playbook site.yml --limit="webservers" --debug