Host based Ansible yaml inventory
Project description
Ansible Roster Inventory Plugin
This repository contains an Ansible Inventory Plugin to generate inventory from a subjectively simpler inventory description file, here within called a roster
while having more possibilities.
It supports host ranges, eg: "[0:9]", but also regex hostnames, eg: "(dev|prd)-srv". It handles variables declared as lists by appending the values instead of replacing them.
This inventory plugin has been written with debops in mind.
Installation from Ansible Galaxy
You can install the latest version from Ansible Galaxy repository.
ansible-galaxy collection install -U julien_lecomte.roster
Installation from PyPI
You can install the latest version from PyPI package repository.
python3 -mpip install -U ansible-roster
Usage
The roster is a file in yaml format and 'yml' or 'yaml' file extension.
In order for Ansible to use the plugin and parse your roster file, several conditions must be met:
-
Your yaml file must contain a line indicating that the file is in the roster format.
-
You must activate plugins and enable the roster inventory plugin in your
ansible.cfg
, or in your.debops.cfg
if using debops
Sample ansible.cfg
[defaults]
# The following line prevents having to pass -i to ansible-inventory.
# Filename can be anything as long as it has a 'yml' or 'yaml' extension although
inventory = roster.yml
[inventory]
# You must enable the roster plugin if 'auto' does not work for you.
# Use 'roster' if installed via the Python package,
# Use 'julien_lecomte.roster.roster' if installed via Ansible Galaxy
enable_plugins = julien_lecomte.roster.roster
Sample .debops.cfg
[ansible inventory]
enabled = roster
# Use 'roster' if installed via the Python package,
# Use 'julien_lecomte.roster.roster' if installed via Ansible Galaxy
enable_plugins = roster
Simpler syntax
A roster inventory has a subjectively simpler syntax than a Ansible yaml inventory file. Instead of specifing children which have to be known in advance, you specify the parents of your host.
A roster inventory is made of at least one yaml file where the plugin to be used is declared. and then the groups and hosts declared in yaml syntax.
A sample, commented, and minimal file named 'roster.yml.tpl' is located at the root of the git repository.
File inclusion
Instead of including every file found in a inventory folder, a roster inventory will only include explicitly specified files. Globbing is supported.
plugin: roster
include:
# include an exact file match
- distrib/debian.yml
# include with wildcard:
- hosts/*.yml
Ranges and Regex support
plugin: roster
hosts:
# Generate 10 hosts: sql-0.example.com to sql-9.example.com
sql-[0:9].example.com:
# Generate 2 hosts: frontend.example.com and backend.example.com
(front|back)end.example.com:
Development
To run unit tests, you can simply run the make target:
# run all tests:
make check
It's also possible to quickly check the output inventory:
export PYTHONPATH="$PYTHONPATH:$(pwd)"
ANSIBLE_INVENTORY_ENABLED=roster ansible-inventory --list -i roster.yml
License
This project is licensed under the MIT License - see the LICENSE file for details.
Locations
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
Hashes for ansible_roster-0.9.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | abe08a6f1098118f948081b81b0697b35cd2e9444a7bf76115b8499e3829d25d |
|
MD5 | 0bbb2d6642c13ca940ecd27681c11fb4 |
|
BLAKE2b-256 | 9caf72c7e55f423d364dfbe186fa77556557570b9c54ca56dc8bfd6bf7efc8ff |