@ -10,7 +10,7 @@ DOCUMENTATION = '''
version_added : " 2.4 "
version_added : " 2.4 "
short_description : Uses Jinja2 to construct vars and groups based on existing inventory .
short_description : Uses Jinja2 to construct vars and groups based on existing inventory .
description :
description :
- Uses a YAML configuration file with a ` ` . config ` ` extension to define var expres i sions and group conditionals
- Uses a YAML configuration file with a valid YAML or ` ` . config ` ` extension to define var expres sions and group conditionals
- The Jinja2 conditionals that qualify a host for membership .
- The Jinja2 conditionals that qualify a host for membership .
- The JInja2 exprpessions are calculated and assigned to the variables
- The JInja2 exprpessions are calculated and assigned to the variables
- Only variables already available from previous inventories or the fact cache can be used for templating .
- Only variables already available from previous inventories or the fact cache can be used for templating .
@ -54,6 +54,9 @@ EXAMPLES = '''
import os
import os
from collections import MutableMapping
from ansible import constants as C
from ansible . errors import AnsibleParserError
from ansible . errors import AnsibleParserError
from ansible . plugins . inventory import BaseInventoryPlugin
from ansible . plugins . inventory import BaseInventoryPlugin
from ansible . module_utils . _text import to_native
from ansible . module_utils . _text import to_native
@ -75,7 +78,7 @@ class InventoryModule(BaseInventoryPlugin):
if super ( InventoryModule , self ) . verify_file ( path ) :
if super ( InventoryModule , self ) . verify_file ( path ) :
file_name , ext = os . path . splitext ( path )
file_name , ext = os . path . splitext ( path )
if not ext or ext == ' .config ' :
if not ext or ext in [ ' .config ' ] + C . YAML_FILENAME_EXTENSIONS :
valid = True
valid = True
return valid
return valid
@ -92,6 +95,8 @@ class InventoryModule(BaseInventoryPlugin):
if not data :
if not data :
raise AnsibleParserError ( " %s is empty " % ( to_native ( path ) ) )
raise AnsibleParserError ( " %s is empty " % ( to_native ( path ) ) )
elif not isinstance ( data , MutableMapping ) :
raise AnsibleParserError ( ' inventory source has invalid structure, it should be a dictionary, got: %s ' % type ( data ) )
elif data . get ( ' plugin ' ) != self . NAME :
elif data . get ( ' plugin ' ) != self . NAME :
raise AnsibleParserError ( " %s is not a constructed groups config file, plugin entry must be ' constructed ' " % ( to_native ( path ) ) )
raise AnsibleParserError ( " %s is not a constructed groups config file, plugin entry must be ' constructed ' " % ( to_native ( path ) ) )