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

Add an expand_csv_tags setting to ec2.ini

If enabled, this will convert tags of the form "a,b,c" to a list and use
the results to create additional inventory groups.

This is based on PR #8676 by nickpeck (but not a straight rebase—both
the code and the nomenclature have been changed here).

Closes #8676
This commit is contained in:
Abhijit Menon-Sen 2015-10-06 12:18:43 +05:30
parent 7fd8b86a10
commit e6a9b2cae5
2 changed files with 25 additions and 7 deletions

View file

@ -97,6 +97,10 @@ nested_groups = False
# Replace - tags when creating groups to avoid issues with ansible # Replace - tags when creating groups to avoid issues with ansible
replace_dash_in_groups = True replace_dash_in_groups = True
# If set to true, any tag of the form "a,b,c" is expanded into a list
# and the results are used to create additional tag_* inventory groups.
expand_csv_tags = False
# The EC2 inventory output can become very large. To manage its size, # The EC2 inventory output can become very large. To manage its size,
# configure which groups should be created. # configure which groups should be created.
group_by_instance_id = True group_by_instance_id = True

View file

@ -141,6 +141,7 @@ except ImportError:
class Ec2Inventory(object): class Ec2Inventory(object):
def _empty_inventory(self): def _empty_inventory(self):
return {"_meta" : {"hostvars" : {}}} return {"_meta" : {"hostvars" : {}}}
@ -321,6 +322,11 @@ class Ec2Inventory(object):
self.cache_path_index = cache_dir + "/ansible-ec2.index" self.cache_path_index = cache_dir + "/ansible-ec2.index"
self.cache_max_age = config.getint('ec2', 'cache_max_age') self.cache_max_age = config.getint('ec2', 'cache_max_age')
if config.has_option('ec2', 'expand_csv_tags'):
self.expand_csv_tags = config.getboolean('ec2', 'expand_csv_tags')
else:
self.expand_csv_tags = False
# Configure nested groups instead of flat namespace. # Configure nested groups instead of flat namespace.
if config.has_option('ec2', 'nested_groups'): if config.has_option('ec2', 'nested_groups'):
self.nested_groups = config.getboolean('ec2', 'nested_groups') self.nested_groups = config.getboolean('ec2', 'nested_groups')
@ -696,6 +702,12 @@ class Ec2Inventory(object):
# Inventory: Group by tag keys # Inventory: Group by tag keys
if self.group_by_tag_keys: if self.group_by_tag_keys:
for k, v in instance.tags.items(): for k, v in instance.tags.items():
if self.expand_csv_tags and v and ',' in v:
values = map(lambda x: x.strip(), v.split(','))
else:
values = [v]
for v in values:
if v: if v:
key = self.to_safe("tag_" + k + "=" + v) key = self.to_safe("tag_" + k + "=" + v)
else: else:
@ -1120,6 +1132,8 @@ class Ec2Inventory(object):
instance_vars['ec2_placement'] = value.zone instance_vars['ec2_placement'] = value.zone
elif key == 'ec2_tags': elif key == 'ec2_tags':
for k, v in value.items(): for k, v in value.items():
if self.expand_csv_tags and ',' in v:
v = map(lambda x: x.strip(), v.split(','))
key = self.to_safe('ec2_tag_' + k) key = self.to_safe('ec2_tag_' + k)
instance_vars[key] = v instance_vars[key] = v
elif key == 'ec2_groups': elif key == 'ec2_groups':