# Foreman inventory (https://github.com/theforeman/foreman_ansible_inventory)
#
# This script can be used as an Ansible dynamic inventory.
# The connection parameters are set up via *foreman.ini*
# This is how the script founds the configuration file in
# order of discovery.
#
#     * `/etc/ansible/foreman.ini`
#     * Current directory of your inventory script.
#     * `FOREMAN_INI_PATH` environment variable.
#
# ## 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 inventory will provide a set of groups, by default prefixed by
# 'foreman_'. If you want to customize this prefix, change the
# group_prefix option in /etc/ansible/foreman.ini. The rest of this
# guide will assume the default prefix of 'foreman'
#
# The hostgroup, location, organization, content view, and lifecycle
# environment of each host are created as Ansible groups 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
#
# If the parameter want_hostcollections is set to true, the
# collections each host is in are created as Ansible groups with a
# foreman_hostcollection prefix, all lowercase and problematic
# parameters removed. So e.g. the Foreman host collection
#
#     Patch Window Thursday
#
# would turn into the Ansible group:
#
#     foreman_hostcollection_patchwindowthursday
#
# If the parameter host_filters is set, it will be used as the
# "search" parameter for the /api/v2/hosts call. This can be used to
# restrict the list of returned host, as shown below.
#
# Furthermore Ansible 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 and host variables.
#
# 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
#
# The host is also in a subnet called "mysubnet" and provisioned via an image
# then *group_patterns* like:
#
#     [ansible]
#     group_patterns = ["{app_param}-{tier_param}-{dc_param}",
#                       "{app_param}-{tier_param}",
#                       "{app_param}",
#                       "{subnet_name}-{provision_method}"]
#
# would put the host into the additional Ansible groups:
#
#     - myapp-webtier-datacenter1
#     - myapp-webtier
#     - myapp
#     - mysubnet-image
#
# by recursively resolving the hostgroups, getting the parameter keys
# and values and doing a Python *string.format()* like replacement on
# it.
#
[foreman]
url = http://localhost:3000/
user = foreman
password = secret
ssl_verify = True

# Retrieve only hosts from the organization "Web Engineering".
# host_filters = organization="Web Engineering"

# Retrieve only hosts from the organization "Web Engineering" that are
# also in the host collection "Apache Servers".
# host_filters = organization="Web Engineering" and host_collection="Apache Servers"

[ansible]
group_patterns = ["{app}-{tier}-{color}",
	          "{app}-{color}",
	          "{app}",
		  "{tier}"]
group_prefix = foreman_

# Whether to fetch facts from Foreman and store them on the host
want_facts = True

# Whether to create Ansible groups for host collections. Only tested
# with Katello (Red Hat Satellite). Disabled by default to not break
# the script for stand-alone Foreman.
want_hostcollections = False

# Whether to interpret global parameters value as JSON (if possible, else
# take as is). Only tested with Katello (Red Hat Satellite).
# This allows to define lists and dictionaries (and more complicated structures)
# variables by entering them as JSON string in Foreman parameters.
# Disabled by default as the change would else not be backward compatible.
rich_params = False

[cache]
path = .
max_age = 60

# Whether to scan foreman to add recently created hosts in inventory cache
scan_new_hosts = True