@ -298,6 +298,12 @@ class _BaseInventoryPlugin(AnsiblePlugin):
return ( hostnames , port )
def _set_group_vars ( self , group_name , gvars ) :
gobj = self . inventory . groups . get ( group_name )
for gvar in gvars :
gobj . set_variable ( gvar , gvars [ gvar ] )
class BaseInventoryPlugin ( _BaseInventoryPlugin ) :
""" Parses an Inventory Source """
@ -406,6 +412,11 @@ class Constructable(_BaseInventoryPlugin):
for keyed in keys :
if keyed and isinstance ( keyed , dict ) :
group_vars = keyed . get ( ' vars ' , { } )
if group_vars :
# allow using group vars for templating
variables = combine_vars ( variables , group_vars )
if fetch_hostvars :
variables = combine_vars ( variables , self . inventory . get_host ( host ) . get_vars ( ) )
try :
@ -414,6 +425,7 @@ class Constructable(_BaseInventoryPlugin):
if strict :
raise AnsibleParserError ( " Could not generate group for host %s from %s entry: %s " % ( host , keyed . get ( ' key ' ) , to_native ( e ) ) )
continue
default_value_name = keyed . get ( ' default_value ' , None )
trailing_separator = keyed . get ( ' trailing_separator ' )
if trailing_separator is not None and default_value_name is not None :
@ -467,11 +479,12 @@ class Constructable(_BaseInventoryPlugin):
result_gname = self . inventory . add_group ( gname )
self . inventory . add_host ( host , result_gname )
self . _set_group_vars ( result_gname , group_vars )
if raw_parent_name :
parent_name = self . _sanitize_group_name ( raw_parent_name )
self . inventory . add_group ( parent_name )
self . inventory . add_child ( parent_name , result_gname )
else :
# exclude case of empty list and dictionary, because these are valid constructions
# simply no groups need to be constructed, but are still falsy