# generator – Uses Jinja2 to construct hosts and groups from patterns

New in version 2.6.

- Synopsis
- Parameters
- Examples
- Status

## Synopsis

- Uses a YAML configuration file with a valid YAML or `.config` extension to define var expressions and group conditionals
- Create a template pattern that describes each host, and then use independent configuration layers
- Every element of every layer is combined to create a host for every layer combination
- Parent groups can be defined with reference to hosts and other groups using the same template variables

## Parameters

Parameter | Choices/Defaults | Configuration | Comments
--- | --- | --- | ---

hosts
-

The `name` key is a template used to generate hostnames based on the `layers` option. Each variable in the name is expanded to create a cartesian product of all possible layer combinations.
The `parents` are a list of parent groups that the host belongs to. Each `parent` item contains a `name` key, again expanded from the template, and an optional `parents` key that lists its parents.
Parents can also contain `vars`, which is a dictionary of vars that is then always set for that variable. This can provide easy access to the group name. E.g set an `application` variable that is set to the value of the `application` layer name.

layers - |  |  | A dictionary of layers, with the key being the layer name, used as a variable name in the `host` `name` and `parents` keys. Each layer value is a list of possible values for that layer.

plugin
- / required

Choices:
- generator

token that ensures this is a source file for the 'generator' plugin.

## Examples

    # inventory.config file in YAML format
    plugin: generator
    strict: False
    hosts:
        name: "{{ operation }}-{{ application }}-{{ environment }}-runner"
        parents:
          - name: "{{ operation }}-{{ application }}-{{ environment }}"
            parents:
              - name: "{{ operation }}-{{ application }}"
                parents:
                  - name: "{{ operation }}"
                  - name: "{{ application }}"
              - name: "{{ application }}-{{ environment }}"
                parents:
                  - name: "{{ application }}"
                    vars:
                      application: "{{ application }}"
                  - name: "{{ environment }}"
                    vars:
                      environment: "{{ environment }}"
          - name: runner
    layers:
        operation:
            - build
            - launch
        environment:
            - dev
            - test
            - prod
        application:
            - web
            - api

## Status

- This inventory is not guaranteed to have a backwards compatible interface. [preview]
- This inventory is maintained by the Ansible Community. [community]

### Authors

- UNKNOWN

Hint

If you notice any issues in this documentation, you can edit this document to improve it.

Hint

Configuration entries for each entry type have a low to high priority order. For example, a variable that is lower in the list will override a variable that is higher up.