Dynamic Ansible Inventory Generator
Project description
Dynamic Ansible Inventory
This is a dynamic inventory script for Ansible that reads the inventory from a directory. A list of hosts is managed by the user. Each host has metadata that is used to gather variables.
The structure of the inventory directory is as follows:
hosts/
host1.yaml
host2.yaml
host3.yaml
generated/
host1.yaml
host2.yaml
host3.yaml
metadata/
tags/
tag1.yaml
tag2.yaml
platform/
platform1.yaml
platform2.yaml
my_custom_metadata/
my_custom_metadata1.yaml
my_custom_metadata2.yaml
The hosts directory contains host files that define the hosts.
The generated directory contains generated host files that are created by the script and used as an inventory.
The metadata directory contains metadata files that can be used to give hosts variables.
To use the metadata, the host file must have a metadata key that contains a list of metadata files.
metadata:
tags:
- tag1
platform: platform1
my_custom_metadata: my_custom_metadata1
Under example/ you can find an example of how to build an inventory.
Jinja2 can be used inside of variables, because it is parsed by Ansible at runtime.
domain_name: example.com
hostname: ap01
ansible_host: "{{ hostname }}.{{ domain_name }}"
dns_servers:
- 1.1.1.1
- 8.8.8.8
network_interfaces:
- name: eth0
type: ethernet
state: up
ip: 192.168.1.100
netmask: 255.255.255.0
gateway: 192.168.1.1
dns: "{{ dns_servers }}"
Usage
Install with pip install -U invgen or uv tool install -U invgen.
Generate Inventory
# set the environment variable INVGEN_SOURCE to the path of the inventory directory
export INVGEN_SOURCE="$PWD/example/"
# generate the host files
invgen generate --verbose
Ansible
# set the environment variable INVGEN_SOURCE to the path of the inventory directory
export INVGEN_SOURCE="$PWD/example/"
# run playbook with the inventory
ansible-playbook -i $(which invgen-ansible) playbook.yaml
# explore the inventory
❯ ansible-inventory -i $(which invgen-ansible) --graph
[ERROR]: 2024-11-23 19:22:29,537 - INFO - inventory - Generating inventory from /home/fwrage/dev/invgen/example
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
@all:
|--@ungrouped:
|--@environment_production:
| |--ap01.test.local
|--@provider_self-hosted:
| |--ap01.test.local
|--@hardware_raspberry-pi-4:
| |--ap01.test.local
|--@os_rhel-9:
| |--ap01.test.local
|--@services_podman-rootless:
| |--ap01.test.local
|--@tags_selinux-deactivated:
| |--ap01.test.local
Templates
It is possible to use Jinja2 templates to generate host files.
---
metadata:
platform: {{ platform }}
provider: {{ provider }}
services: {{ services }}
ansible_host: {{ name }}
## Host
invgen new host -t example/templates/host.yaml -d example/hosts --name "ap02.test.local" -o "platform=raspberry-pi-4 provider=self-hosted services=pihole,dnsmasq"
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file invgen-1.0.3.tar.gz.
File metadata
- Download URL: invgen-1.0.3.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
929c295b1d46337b844314a63f812397aec559433056c74e93c0a81dfbdb9282
|
|
| MD5 |
9ff142865a1ded932f7b15fc3e204fbf
|
|
| BLAKE2b-256 |
1f94957ae33c410738d16d02d5cb1e91cc5d10c7ec95036316cbc5f5363433b4
|
File details
Details for the file invgen-1.0.3-py3-none-any.whl.
File metadata
- Download URL: invgen-1.0.3-py3-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e23f708d73623d9fb455fc240fa2b4aafe1b7584106cf9042c22a73ba5c57c19
|
|
| MD5 |
4aa64396ea03a62235983c7702bc51e4
|
|
| BLAKE2b-256 |
b5a8f4434abda6a7f94f56cdbb0085ce567ea4c4ca9ae27835ee2ab5d94e32ee
|