diff options
author | Brian Coca <bcoca@users.noreply.github.com> | 2017-08-21 16:06:15 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-21 16:06:15 -0400 |
commit | a897193bcee28e3698362e8b47cebc53f585dd61 (patch) | |
tree | d53343ba62fa1db4beb5c9a4a6c33829aaaa1026 /lib/ansible/plugins/inventory/__init__.py | |
parent | ec11cd2696f7b698d69f266f89369d2f0de67c8b (diff) | |
download | ansible-a897193bcee28e3698362e8b47cebc53f585dd61.tar.gz |
Moar constructive (#28254)
* made composite vars and groups generic
now you can do both in every plugin that chooses to suport it
renamed constructed_groups as it now also constructs vars ... to constructed
moved most of constructed_groups logic into base class to easily share
* documented inventory_hostname
* typo fix
Diffstat (limited to 'lib/ansible/plugins/inventory/__init__.py')
-rw-r--r-- | lib/ansible/plugins/inventory/__init__.py | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/lib/ansible/plugins/inventory/__init__.py b/lib/ansible/plugins/inventory/__init__.py index ddad67861f..658d38168f 100644 --- a/lib/ansible/plugins/inventory/__init__.py +++ b/lib/ansible/plugins/inventory/__init__.py @@ -50,6 +50,7 @@ class BaseInventoryPlugin(object): self.loader = loader self.inventory = inventory + self.templar = Templar(loader=loader) def verify_file(self, path): ''' Verify if file is usable by this plugin, base does minimal accessability check ''' @@ -81,9 +82,31 @@ class BaseInventoryPlugin(object): def _compose(self, template, variables): ''' helper method for pluigns to compose variables for Ansible based on jinja2 expression and inventory vars''' - t = Templar(loader=self.loader, variables=variables) + t = self.templar + t.set_available_variables(variables) return t.do_template('%s%s%s' % (t.environment.variable_start_string, template, t.environment.variable_end_string), disable_lookups=True) + def _set_composite_vars(self, compose, variables, host): + ''' loops over compose entries to create vars for hosts ''' + if compose and isinstance(compose, dict): + for varname in compose: + composite = self._compose(compose[varname], variables) + self.inventory.set_variable(host, varname, composite) + + def _add_host_to_composed_groups(self, groups, variables, host): + ''' helper to create complex groups for plugins based on jinaj2 conditionals, hosts that meet the conditional are added to group''' + # process each 'group entry' + if groups and isinstance(groups, dict): + self.templar.set_available_variables(variables) + for group_name in groups: + conditional = "{%% if %s %%} True {%% else %%} False {%% endif %%}" % groups[group_name] + result = self.templar.template(conditional) + if result and bool(result): + # ensure group exists + self.inventory.add_group(group_name) + # add host to group + self.inventory.add_child(group_name, host) + class BaseFileInventoryPlugin(BaseInventoryPlugin): """ Parses a File based Inventory Source""" |