Keep track of role dependencies across plays

Also fixes a bug in which tags specified on top-level roles were
not being passed down to dependent roles.

Fixes #4656
This commit is contained in:
James Cammarata 2014-03-05 14:25:24 -06:00
commit 73c883c122
3 changed files with 25 additions and 3 deletions

View file

@ -240,13 +240,20 @@ class PlayBook(object):
plays = []
matched_tags_all = set()
unmatched_tags_all = set()
included_roles = []
# loop through all patterns and run them
self.callbacks.on_start()
for (play_ds, play_basedir) in zip(self.playbook, self.play_basedirs):
play = Play(self, play_ds, play_basedir, vault_password=self.vault_password)
play = Play(self, play_ds, play_basedir, included_roles=included_roles, vault_password=self.vault_password)
assert play is not None
# add any new roles brought in by this play to the
# global list of roles we're tracking
for role in play.included_roles:
if role not in included_roles:
included_roles.append(role)
matched_tags, unmatched_tags = play.compare_tags(self.only_tags)
matched_tags_all = matched_tags_all | matched_tags
unmatched_tags_all = unmatched_tags_all | unmatched_tags