|
|
|
# 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
|
|
|
|
|
|
|
|
# Whether to populate the ansible_ssh_host variable to explicitly specify the
|
|
|
|
# connection target. Only tested with Katello (Red Hat Satellite).
|
|
|
|
# If the foreman 'ip' fact exists then the ansible_ssh_host varibale is populated
|
|
|
|
# to permit connections where DNS resolution fails.
|
|
|
|
want_ansible_ssh_host = False
|
|
|
|
|
|
|
|
[cache]
|
|
|
|
path = .
|
|
|
|
max_age = 60
|
|
|
|
|
|
|
|
# Whether to scan foreman to add recently created hosts in inventory cache
|
|
|
|
scan_new_hosts = True
|