Ansible simplified yaml inventory
Project description
Ansible Roster 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
Install latest version:
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
enable_plugins = roster
Sample .debops.cfg
[ansible inventory]
enabled = roster
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, at least, a single yaml file where the plugin to be used is declared, and groups and hosts declared in yaml syntax.
A sample, commented, file named 'roster.yml.tpl' is located at the root of the git repository.
Example:
---
# Tell ansible that this yaml file is a roster file:
plugin: roster
hosts:
# We have a single host in this inventory:
debian.example.com:
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:
Labels
TODO, lorem ipsum
Variable priority
TODO, lorem ipsum
Variable merging
TODO, lorem ipsum
The roster inventory file is a typical yaml file.
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.6.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 48688c92e7c380d3a9d68e8da0e7af3d777724443914a18a4184caa5945de8ed |
|
MD5 | 286734958889f55c3f2b521532fb85b2 |
|
BLAKE2b-256 | 8f4349412793768b88c1b386b61fda2c8adc43d8eeaa5d10bb05ddff3321dc3a |