avoid hosts 'pre templated warnings' (#23878)

* avoid hosts 'pre templated warnings'

fixed is_template failing on undefined
fixes #23057

* py3 compat
This commit is contained in:
Brian Coca 2017-04-24 15:19:52 -04:00 committed by GitHub
parent 74e385e43a
commit a108f0fcd3
2 changed files with 8 additions and 3 deletions

View file

@ -503,8 +503,8 @@ class Templar:
''' lets us know if data has a template'''
if isinstance(data, string_types):
try:
new = self.do_template(data)
except UndefinedError:
new = self.do_template(data, fail_on_undefined=True)
except (AnsibleUndefinedVariable, UndefinedError):
return True
except:
return False

View file

@ -429,8 +429,13 @@ class VariableManager:
variables['inventory_dir'] = self._inventory.basedir()
variables['inventory_file'] = self._inventory.src()
if play:
templar = Templar(loader=loader)
if templar.is_template(play.hosts):
pattern = 'all'
else:
pattern = play.hosts or 'all'
# add the list of hosts in the play, as adjusted for limit/filters
variables['ansible_play_hosts_all'] = [x.name for x in self._inventory.get_hosts(pattern=play.hosts or 'all', ignore_restrictions=True)]
variables['ansible_play_hosts_all'] = [x.name for x in self._inventory.get_hosts(pattern=pattern, ignore_restrictions=True)]
variables['ansible_play_hosts'] = [x for x in variables['ansible_play_hosts_all'] if x not in play._removed_hosts]
variables['ansible_play_batch'] = [x.name for x in self._inventory.get_hosts() if x.name not in play._removed_hosts]