This is a Dynamic Inventory for Ansible to be used together with MySQL.
It was written because we maintain a lot of servers and static inventory files did not meet our demand, and we like MySQL.
Simply call the script like the following
ansible-playbook -i mysql.py
# or
ansible -i mysql.py
Limitations also work
ansible-playbook -i mysql.py --limit foo.bar.com
ansible-playbook -i mysql.py --limit groupFoo
I won't explain the process of installing a database or creating the tables, see tables.sql
for the required MySQL structure.
Once setup rename mysql.ini.dist
to mysql.ini
to suit your needs, if you don't want to use caching just put it on 0.
In the table group
you create the groups you need and their variables,
In the table host
under host
you place the IP/DNS for the system. This will be used as ansible_host fact.
Under hostname
you can fill in a unique hostname, this will typically be used as the host's primary key (==inventory_hostname
).
You can modify the field to be used as inventory_hostname
by changing the inventory_hostname
variable in mysql.ini
.
Make sure this is a unique key field (e.g. host
or hostname
), the default for inventory_hostname
is host
(backward compatible).
The table hostgroups
maps the relation between host
and group
using two FOREIGN KEYS
.
Groups can have other groups as children, use the table childgroups
.
By default only groups from hostgroups
and groups from childgroups
having a child group from hostgroups
will be included into the inventory (i.e. max. two group levels).
You can include all groups from hostgroups
and childgroups
by changing the inventory_groups
variable in mysql.ini
to all
.
This allows you to define group hierarchies of any depth and complexity.
This applies to host
and group
respectively.
If no variables are needed either NULL it (actual MySQL NULL
not the string
) or use {}
.
# Copyright (c) 2015 Productsup GmbH, Yorick Terweijden yt@products-up.de
#
# As it is mostly based on the original Cobbler Dynamic Inventory
# https://github.com/ansible/ansible/blob/devel/contrib/inventory/cobbler.py
# the same license, the GPL-3 applies.
The GPL-3 can be found under the link.