Ansible dynamic inventory that queries the Foreman
Project description
foreman_ansible_inventory
=========================
This script can be used as an ansible dynamic inventory[1].
The connection parameters are set up via a configuration
file *foreman.ini* that resides in the same dir as the
inventory script.
## Variables and Parameters
The data returned from Foreman for each host is stored in a foreman
hash so they're available as *host_vars* along with the parameters
of the host and it's hostgroups:
"foo.example.com": {
"foreman": {
"architecture_id": 1,
"architecture_name": "x86_64",
"build": false,
"build_status": 0,
"build_status_label": "Installed",
"capabilities": [
"build",
"image"
],
"compute_profile_id": 4,
"hostgroup_name": "webtier/myapp",
"id": 70,
"image_name": "debian8.1",
...
"uuid": "50197c10-5ebb-b5cf-b384-a1e203e19e77"
},
"foreman_params": {
"testparam1": "foobar",
"testparam2": "small",
...
}
and could therefore be used in ansible like:
- debug: msg="From Foreman host {{ foreman['uuid'] }}"
Which yields
TASK [test_foreman : debug] ****************************************************
ok: [foo.example.com] => {
"msg": "From Foreman host 50190bd1-052a-a34a-3c9c-df37a39550bf"
}
## Automatic ansible groups
The hostgroup, location and organization of each host is created as
ansible group with a foreman_<grouptype> prefix, all lowercase and
problematic parameters removed. So e.g. the foreman hostgroup
myapp / webtier / datacenter1
would turn into the ansible group:
foreman_hostgroup_myapp_webtier_datacenter1
Furthermore groups can be created on the fly using the
*group_patterns* variable in *foreman.ini* so that you can build up
hierarchies using parameters on the hostgroup.
Lets assume you have a host that is built using this nested hostgroup:
myapp / webtier / datacenter1
and each of the hostgroups defines a parameters respectively:
myapp: app_param = myapp
webtier: tier_param = webtier
datacenter1: dc_param = datacenter1
then *group_patterns* like:
[ansible]
group_patterns = ["{app_param}-{tier_param}-{dc_param}",
"{app_param}-{tier_param}",
"{app_param}"]
would put the host into the additional anisble groups:
- myapp-webtier-datacenter1
- myapp-webtier
- myapp
by reursively resolving the hostgroups, getting the parameter keys and
values performing doing a Python *string.format()* like replacement on
it.
[1]: http://docs.ansible.com/intro_dynamic_inventory.html
=========================
This script can be used as an ansible dynamic inventory[1].
The connection parameters are set up via a configuration
file *foreman.ini* that resides in the same dir as the
inventory script.
## Variables and Parameters
The data returned from Foreman for each host is stored in a foreman
hash so they're available as *host_vars* along with the parameters
of the host and it's hostgroups:
"foo.example.com": {
"foreman": {
"architecture_id": 1,
"architecture_name": "x86_64",
"build": false,
"build_status": 0,
"build_status_label": "Installed",
"capabilities": [
"build",
"image"
],
"compute_profile_id": 4,
"hostgroup_name": "webtier/myapp",
"id": 70,
"image_name": "debian8.1",
...
"uuid": "50197c10-5ebb-b5cf-b384-a1e203e19e77"
},
"foreman_params": {
"testparam1": "foobar",
"testparam2": "small",
...
}
and could therefore be used in ansible like:
- debug: msg="From Foreman host {{ foreman['uuid'] }}"
Which yields
TASK [test_foreman : debug] ****************************************************
ok: [foo.example.com] => {
"msg": "From Foreman host 50190bd1-052a-a34a-3c9c-df37a39550bf"
}
## Automatic ansible groups
The hostgroup, location and organization of each host is created as
ansible group with a foreman_<grouptype> prefix, all lowercase and
problematic parameters removed. So e.g. the foreman hostgroup
myapp / webtier / datacenter1
would turn into the ansible group:
foreman_hostgroup_myapp_webtier_datacenter1
Furthermore groups can be created on the fly using the
*group_patterns* variable in *foreman.ini* so that you can build up
hierarchies using parameters on the hostgroup.
Lets assume you have a host that is built using this nested hostgroup:
myapp / webtier / datacenter1
and each of the hostgroups defines a parameters respectively:
myapp: app_param = myapp
webtier: tier_param = webtier
datacenter1: dc_param = datacenter1
then *group_patterns* like:
[ansible]
group_patterns = ["{app_param}-{tier_param}-{dc_param}",
"{app_param}-{tier_param}",
"{app_param}"]
would put the host into the additional anisble groups:
- myapp-webtier-datacenter1
- myapp-webtier
- myapp
by reursively resolving the hostgroups, getting the parameter keys and
values performing doing a Python *string.format()* like replacement on
it.
[1]: http://docs.ansible.com/intro_dynamic_inventory.html
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
Close
Hashes for foreman_ansible_inventory-0.0.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8a8030334b6c5bbfc74aec4efdcd391ac6688b3d5575a3019088afed69e4999e |
|
MD5 | 684115832faf799b4d908832108f1031 |
|
BLAKE2b-256 | 037a9e5f5866423d8989dd3fa13181051826effe8853e19d02bb7614702233b9 |