mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
[cloud] snake_case hostvars in aws_ec2 inventory plugin (#35306)
* snake_case hostvars in aws_ec2 inventory plugin for improved compatibility with AWS modules * Format tags with boto3_tag_list_to_ansible_dict
This commit is contained in:
parent
13cbe115e1
commit
1454cafd14
1 changed files with 13 additions and 13 deletions
|
@ -81,13 +81,12 @@ simple_config_file:
|
||||||
strict: False
|
strict: False
|
||||||
keyed_groups:
|
keyed_groups:
|
||||||
- prefix: arch
|
- prefix: arch
|
||||||
key: 'Architecture'
|
key: 'architecture'
|
||||||
value: 'x86_64'
|
value: 'x86_64'
|
||||||
- prefix: tag
|
- prefix: tag
|
||||||
key: Tags
|
key: tags
|
||||||
value:
|
value:
|
||||||
"Key": "Name"
|
"Name": "Test"
|
||||||
"Value": "Test"
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
@ -95,12 +94,9 @@ from ansible.errors import AnsibleError, AnsibleParserError
|
||||||
from ansible.module_utils._text import to_native, to_text
|
from ansible.module_utils._text import to_native, to_text
|
||||||
from ansible.module_utils.six import string_types
|
from ansible.module_utils.six import string_types
|
||||||
from ansible.module_utils.ec2 import ansible_dict_to_boto3_filter_list, boto3_tag_list_to_ansible_dict
|
from ansible.module_utils.ec2 import ansible_dict_to_boto3_filter_list, boto3_tag_list_to_ansible_dict
|
||||||
from ansible.module_utils.basic import jsonify
|
from ansible.module_utils.ec2 import camel_dict_to_snake_dict
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable, to_safe_group_name
|
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable, to_safe_group_name
|
||||||
|
|
||||||
from collections import namedtuple
|
|
||||||
import os
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import boto3
|
import boto3
|
||||||
import botocore
|
import botocore
|
||||||
|
@ -243,7 +239,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
def _get_boto_attr_chain(self, filter_name, instance):
|
def _get_boto_attr_chain(self, filter_name, instance):
|
||||||
'''
|
'''
|
||||||
:param filter_name: The filter
|
:param filter_name: The filter
|
||||||
:param instance: A namedtuple
|
:param instance: instance dict returned by boto3 ec2 describe_instances()
|
||||||
'''
|
'''
|
||||||
allowed_filters = sorted(list(instance_data_filter_to_boto_attr.keys()) + list(instance_meta_filter_to_boto_attr.keys()))
|
allowed_filters = sorted(list(instance_data_filter_to_boto_attr.keys()) + list(instance_meta_filter_to_boto_attr.keys()))
|
||||||
if filter_name not in allowed_filters:
|
if filter_name not in allowed_filters:
|
||||||
|
@ -299,7 +295,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
:param regions: a list of regions in which to describe instances
|
:param regions: a list of regions in which to describe instances
|
||||||
:param filters: a list of boto3 filter dicionaries
|
:param filters: a list of boto3 filter dicionaries
|
||||||
:param strict_permissions: a boolean determining whether to fail or ignore 403 error codes
|
:param strict_permissions: a boolean determining whether to fail or ignore 403 error codes
|
||||||
:return A list of namedtuples containing the fields region, instance_meta, and instance_data
|
:return A list of instance dictionaries
|
||||||
'''
|
'''
|
||||||
all_instances = []
|
all_instances = []
|
||||||
|
|
||||||
|
@ -337,7 +333,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
|
|
||||||
def _get_hostname(self, instance, hostnames):
|
def _get_hostname(self, instance, hostnames):
|
||||||
'''
|
'''
|
||||||
:param instance: a named tuple with instance_data field
|
:param instance: an instance dict returned by boto3 ec2 describe_instances()
|
||||||
:param hostnames: a list of hostname destination variables in order of preference
|
:param hostnames: a list of hostname destination variables in order of preference
|
||||||
:return the preferred identifer for the host
|
:return the preferred identifer for the host
|
||||||
'''
|
'''
|
||||||
|
@ -408,11 +404,15 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
'''
|
'''
|
||||||
for host in hosts:
|
for host in hosts:
|
||||||
hostname = self._get_hostname(host, hostnames)
|
hostname = self._get_hostname(host, hostnames)
|
||||||
|
|
||||||
|
host = camel_dict_to_snake_dict(host, ignore_list=['Tags'])
|
||||||
|
host['tags'] = boto3_tag_list_to_ansible_dict(host.get('tags', []))
|
||||||
|
|
||||||
if not hostname:
|
if not hostname:
|
||||||
continue
|
continue
|
||||||
self.inventory.add_host(hostname, group=group)
|
self.inventory.add_host(hostname, group=group)
|
||||||
for hostvar in host.keys():
|
for hostvar, hostval in host.items():
|
||||||
self.inventory.set_variable(hostname, hostvar, host[hostvar])
|
self.inventory.set_variable(hostname, hostvar, hostval)
|
||||||
|
|
||||||
# Use constructed if applicable
|
# Use constructed if applicable
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue