@ -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,15 +702,21 @@ 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 v :
if self . expand_csv_tags and v and ' , ' in v :
key = self . to_safe ( " tag_ " + k + " = " + v )
values = map ( lambda x : x . strip ( ) , v . split ( ' , ' ) )
else :
else :
key = self . to_safe ( " tag_ " + k )
values = [ v ]
self . push ( self . inventory , key , dest )
if self . nested_groups :
for v in values :
self . push_group ( self . inventory , ' tags ' , self . to_safe ( " tag_ " + k ) )
if v :
if v :
self . push_group ( self . inventory , self . to_safe ( " tag_ " + k ) , key )
key = self . to_safe ( " tag_ " + k + " = " + v )
else :
key = self . to_safe ( " tag_ " + k )
self . push ( self . inventory , key , dest )
if self . nested_groups :
self . push_group ( self . inventory , ' tags ' , self . to_safe ( " tag_ " + k ) )
if v :
self . push_group ( self . inventory , self . to_safe ( " tag_ " + k ) , key )
# Inventory: Group by Route53 domain names if enabled
# Inventory: Group by Route53 domain names if enabled
if self . route53_enabled and self . group_by_route53_names :
if self . route53_enabled and self . group_by_route53_names :
@ -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 ' :