Skip to content

Instantly share code, notes, and snippets.

@sivel
Created April 27, 2018 19:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sivel/4eded5522b26ee330e1a0aed84d04e69 to your computer and use it in GitHub Desktop.
Save sivel/4eded5522b26ee330e1a0aed84d04e69 to your computer and use it in GitHub Desktop.
diff --git a/lib/ansible/playbook/__init__.py b/lib/ansible/playbook/__init__.py
index 7391414949..0ec3e10e22 100644
--- a/lib/ansible/playbook/__init__.py
+++ b/lib/ansible/playbook/__init__.py
@@ -54,7 +54,7 @@ class Playbook:
pb._load_playbook_data(file_name=file_name, variable_manager=variable_manager)
return pb
- def _load_playbook_data(self, file_name, variable_manager):
+ def _load_playbook_data(self, file_name, variable_manager, vars=None):
if os.path.isabs(file_name):
self._basedir = os.path.dirname(file_name)
@@ -103,7 +103,7 @@ class Playbook:
which = entry.get('import_playbook', entry.get('include', entry))
display.display("skipping playbook '%s' due to conditional test failure" % which, color=C.COLOR_SKIP)
else:
- entry_obj = Play.load(entry, variable_manager=variable_manager, loader=self._loader)
+ entry_obj = Play.load(entry, variable_manager=variable_manager, loader=self._loader, vars=vars)
self._entries.append(entry_obj)
# we're done, so restore the old basedir in the loader
diff --git a/lib/ansible/playbook/base.py b/lib/ansible/playbook/base.py
index d007dc0932..74abae4b0b 100644
--- a/lib/ansible/playbook/base.py
+++ b/lib/ansible/playbook/base.py
@@ -486,9 +486,9 @@ class Base(with_metaclass(BaseMeta, object)):
try:
if isinstance(ds, dict):
_validate_variable_keys(ds)
- return ds
+ return combine_vars(self.vars, ds)
elif isinstance(ds, list):
- all_vars = dict()
+ all_vars = self.vars
for item in ds:
if not isinstance(item, dict):
raise ValueError
diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py
index 1f8b67b617..e4fe7c17e4 100644
--- a/lib/ansible/playbook/play.py
+++ b/lib/ansible/playbook/play.py
@@ -101,13 +101,15 @@ class Play(Base, Taggable, Become):
return self._attributes.get('name')
@staticmethod
- def load(data, variable_manager=None, loader=None):
+ def load(data, variable_manager=None, loader=None, vars=None):
if ('name' not in data or data['name'] is None) and 'hosts' in data:
if isinstance(data['hosts'], list):
data['name'] = ','.join(data['hosts'])
else:
data['name'] = data['hosts']
p = Play()
+ if vars:
+ p.vars = vars.copy()
return p.load_data(data, variable_manager=variable_manager, loader=loader)
def preprocess_data(self, ds):
diff --git a/lib/ansible/playbook/playbook_include.py b/lib/ansible/playbook/playbook_include.py
index 86532cca71..ed973a77f4 100644
--- a/lib/ansible/playbook/playbook_include.py
+++ b/lib/ansible/playbook/playbook_include.py
@@ -69,7 +69,7 @@ class PlaybookInclude(Base, Conditional, Taggable):
if not os.path.isabs(file_name):
file_name = os.path.join(basedir, file_name)
- pb._load_playbook_data(file_name=file_name, variable_manager=variable_manager)
+ pb._load_playbook_data(file_name=file_name, variable_manager=variable_manager, vars=self.vars.copy())
# finally, update each loaded playbook entry with any variables specified
# on the included playbook and/or any tags which may have been set
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment