From 495a809f469dcb19f27d61993554b80c7bf79e9b Mon Sep 17 00:00:00 2001
From: James Cammarata <jimi@sngx.net>
Date: Wed, 21 Jun 2017 15:28:36 +0100
Subject: [PATCH] Don't include dependent roles in the dep chain for
 include_role

The dependency chain should not include roles below the parent, as it
can introduce very weird things like conditionals from child deps impacting
non-related roles.

Fixes #25136
---
 lib/ansible/playbook/helpers.py      | 2 ++
 lib/ansible/playbook/role_include.py | 3 +--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/ansible/playbook/helpers.py b/lib/ansible/playbook/helpers.py
index ab1dc05f3f7..abfa4088d4c 100644
--- a/lib/ansible/playbook/helpers.py
+++ b/lib/ansible/playbook/helpers.py
@@ -294,6 +294,7 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
                 #   2. one of the appropriate config options was set
                 if 'import_role' in task_ds:
                     is_static = True
+
                 if ir.static is not None:
                     display.deprecated("The use of 'static' for 'include_role' has been deprecated. "
                                        "Use 'import_role' for static inclusion, or 'include_role' for dynamic inclusion")
@@ -315,6 +316,7 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
                         (not needs_templating and ir.all_parents_static() and not ir.loop)
                     )
                     display.debug('Determined that if include_role static is %s' % str(is_static))
+
                 if is_static:
                     # uses compiled list from object
                     t = task_list.extend(ir.get_block_list(variable_manager=variable_manager, loader=loader))
diff --git a/lib/ansible/playbook/role_include.py b/lib/ansible/playbook/role_include.py
index ccb2b1cf9ff..bfa69504027 100644
--- a/lib/ansible/playbook/role_include.py
+++ b/lib/ansible/playbook/role_include.py
@@ -80,7 +80,6 @@ class IncludeRole(TaskInclude):
             dep_chain = []
         else:
             dep_chain = list(self._parent_role._parents)
-            dep_chain.extend(self._parent_role.get_all_dependencies())
             dep_chain.append(self._parent_role)
 
         blocks = actual_role.compile(play=myplay, dep_chain=dep_chain)
@@ -115,7 +114,7 @@ class IncludeRole(TaskInclude):
             if option in ir.args:
                 setattr(ir, option, ir.args.get(option))
 
-        return ir.load_data(data, variable_manager=variable_manager, loader=loader)
+        return ir
 
     def copy(self, exclude_parent=False, exclude_tasks=False):