community.general.linode inventory – Ansible dynamic inventory plugin for Linode.

Note

This inventory plugin is part of the community.general collection (version 9.4.0).

It is not included in ansible-core. To check whether it is installed, run ansible-galaxy collection list.

To install it, use: ansible-galaxy collection install community.general. You need further requirements to be able to use this inventory plugin, see Requirements for details.

To use it in a playbook, specify: community.general.linode.

Synopsis

  • Reads inventories from the Linode API v4.

  • Uses a YAML configuration file that ends with linode.(yml|yaml).

  • Linode labels are used by default as the hostnames.

  • The default inventory groups are built from groups (deprecated by Linode) and not tags.

Requirements

The below requirements are needed on the local controller node that executes this inventory.

  • linode_api4 >= 2.0.0

Parameters

Parameter

Comments

access_token

string / required

The Linode account personal access token.

Configuration:

cache

boolean

added in community.general 4.5.0

Toggle to enable/disable the caching of the inventory’s source data, requires a cache plugin setup to work.

Choices:

  • false ← (default)

  • true

Configuration:

cache_connection

string

added in community.general 4.5.0

Cache connection data or path, read cache plugin documentation for specifics.

Configuration:

cache_plugin

string

added in community.general 4.5.0

Cache plugin to use for the inventory’s source data.

Default: "memory"

Configuration:

cache_prefix

string

added in community.general 4.5.0

Prefix to use for cache plugin files/tables.

Default: "ansible_inventory_"

Configuration:

cache_timeout

integer

added in community.general 4.5.0

Cache duration in seconds.

Default: 3600

Configuration:

compose

dictionary

added in community.general 2.0.0

Create vars from jinja2 expressions.

Default: {}

groups

dictionary

added in community.general 2.0.0

Add hosts to group based on Jinja2 conditionals.

Default: {}

ip_style

string

added in community.general 3.6.0

Populate hostvars with all information available from the Linode APIv4.

Choices:

  • "plain" ← (default)

  • "api"

keyed_groups

list / elements=dictionary

added in community.general 2.0.0

Add hosts to group based on the values of a variable.

Default: []

default_value

string

added in ansible-core 2.12

The default value when the host variable’s value is an empty string.

This option is mutually exclusive with keyed_groups[].trailing_separator.

key

string

The key from input dictionary used to generate groups.

parent_group

string

parent group for keyed group.

prefix

string

A keyed group name will start with this prefix.

Default: ""

separator

string

separator used to build the keyed group name.

Default: "_"

trailing_separator

boolean

added in ansible-core 2.12

Set this option to false to omit the keyed_groups[].separator after the host variable when the value is an empty string.

This option is mutually exclusive with keyed_groups[].default_value.

Choices:

  • false

  • true ← (default)

leading_separator

boolean

added in ansible-core 2.11

Use in conjunction with keyed_groups.

By default, a keyed group that does not have a prefix or a separator provided will have a name that starts with an underscore.

This is because the default prefix is "" and the default separator is "_".

Set this option to false to omit the leading underscore (or other separator) if no prefix is given.

If the group name is derived from a mapping the separator is still used to concatenate the items.

To not use a separator in the group name at all, set the separator for the keyed group to an empty string instead.

Choices:

  • false

  • true ← (default)

plugin

string / required

Marks this as an instance of the ‘linode’ plugin.

Choices:

  • "linode"

  • "community.general.linode"

regions

list / elements=string

Populate inventory with instances in this region.

Default: []

strict

boolean

added in community.general 2.0.0

If yes make invalid entries a fatal error, otherwise skip and continue.

Since it is possible to use facts in the expressions they might not always be available and we ignore those errors by default.

Choices:

  • false ← (default)

  • true

tags

list / elements=string

added in community.general 2.0.0

Populate inventory only with instances which have at least one of the tags listed here.

Default: []

types

list / elements=string

Populate inventory with instances with this type.

Default: []

use_extra_vars

boolean

added in ansible-core 2.11

Merge extra vars into the available variables for composition (highest precedence).

Choices:

  • false ← (default)

  • true

Configuration:

Examples

# Minimal example. `LINODE_ACCESS_TOKEN` is exposed in environment.
plugin: community.general.linode

# You can use Jinja to template the access token.
plugin: community.general.linode
access_token: "{{ lookup('ini', 'token', section='your_username', file='~/.config/linode-cli') }}"
# For older Ansible versions, you need to write this as:
# access_token: "{{ lookup('ini', 'token section=your_username file=~/.config/linode-cli') }}"

# Example with regions, types, groups and access token
plugin: community.general.linode
access_token: foobar
regions:
  - eu-west
types:
  - g5-standard-2

# Example with keyed_groups, groups, and compose
plugin: community.general.linode
access_token: foobar
keyed_groups:
  - key: tags
    separator: ''
  - key: region
    prefix: region
groups:
  webservers: "'web' in (tags|list)"
  mailservers: "'mail' in (tags|list)"
compose:
  # By default, Ansible tries to connect to the label of the instance.
  # Since that might not be a valid name to connect to, you can
  # replace it with the first IPv4 address of the linode as follows:
  ansible_ssh_host: ipv4[0]
  ansible_port: 2222

# Example where control traffic limited to internal network
plugin: community.general.linode
access_token: foobar
ip_style: api
compose:
  ansible_host: "ipv4 | community.general.json_query('[?public==`false`].address') | first"

Authors

  • Luke Murphy (@decentral1se)

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.