1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

Add support for keyed_groups, groups, and compose options to linode i… (#1453)

* Add support for keyed_groups, groups, and compose options to linode inventory
plugin

* Changed instance,label to instance.label
various lint fixes around spacing

* Change self._strict to a local variable as it's no longer needed in other
methods

* Modified DESCRIPTION to add a version_added property to each of the new options.

* Add Changelog fragment

* Minor changes to the changelog fragment

* Replace 'the standard' with 'support for'

* Update description to note that the inventory groups are created by default
from the group attribute not tags and that the group attribute has been
depricated by Linode.

* Remove trailing space in description

* Add period to changelog fragment

Co-authored-by: Clinton Bunch <cdbunch@zeus.int.zentaur.org>
This commit is contained in:
cdbunch72 2020-12-27 06:53:41 -06:00 committed by GitHub
parent 09e2699d1c
commit 58a9287689
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 3 deletions

View file

@ -0,0 +1,4 @@
minor_changes:
- linode inventory plugin - add support for ``keyed_groups``, ``groups``,
and ``compose`` options
(https://github.com/ansible-collections/community.general/issues/1326).

View file

@ -17,7 +17,10 @@ DOCUMENTATION = r'''
- 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 inventory groups are built from groups and not tags.
- The default inventory groups are built from groups (deprecated by
Linode) and not tags.
extends_documentation_fragment:
- constructed
options:
plugin:
description: marks this as an instance of the 'linode' plugin
@ -38,6 +41,14 @@ DOCUMENTATION = r'''
default: []
type: list
required: false
strict:
version_added: 2.0.0
compose:
version_added: 2.0.0
groups:
version_added: 2.0.0
keyed_groups:
version_added: 2.0.0
'''
EXAMPLES = r'''
@ -51,13 +62,27 @@ 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:
ansible_port: 2222
'''
import os
from ansible.errors import AnsibleError, AnsibleParserError
from ansible.module_utils.six import string_types
from ansible.plugins.inventory import BaseInventoryPlugin
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
try:
@ -68,7 +93,7 @@ except ImportError:
HAS_LINODE = False
class InventoryModule(BaseInventoryPlugin):
class InventoryModule(BaseInventoryPlugin, Constructable):
NAME = 'community.general.linode'
@ -203,9 +228,27 @@ class InventoryModule(BaseInventoryPlugin):
self._get_instances_inventory()
strict = self.get_option('strict')
regions, types = self._get_query_options(config_data)
self._filter_by_config(regions, types)
self._add_groups()
self._add_instances_to_groups()
self._add_hostvars_for_instances()
for instance in self.instances:
variables = self.inventory.get_host(instance.label).get_vars()
self._add_host_to_composed_groups(
self.get_option('groups'),
variables,
instance.label,
strict=strict)
self._add_host_to_keyed_groups(
self.get_option('keyed_groups'),
variables,
instance.label,
strict=strict)
self._set_composite_vars(
self.get_option('compose'),
variables,
instance.label,
strict=strict)