mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-23 05:10:22 -07:00
Reworking the way end of role detection is done
Rather than trying to enumerate tasks or track an ever changing cur_role flag in PlayIterator, this change simply sets a flag on the last block in the list of blocks returned by Role.compile(). The PlayIterator then checks for that flag when the cur_block number is incremented, and marks the role as complete if the given host had any tasks run in that role. Fixes #20224
This commit is contained in:
parent
d7967aa3a1
commit
cae682607c
4 changed files with 56 additions and 99 deletions
|
@ -53,6 +53,9 @@ class Block(Base, Become, Conditional, Taggable):
|
|||
self._use_handlers = use_handlers
|
||||
self._implicit = implicit
|
||||
|
||||
# end of role flag
|
||||
self._eor = False
|
||||
|
||||
if task_include:
|
||||
self._parent = task_include
|
||||
elif parent_block:
|
||||
|
@ -182,6 +185,7 @@ class Block(Base, Become, Conditional, Taggable):
|
|||
new_me = super(Block, self).copy()
|
||||
new_me._play = self._play
|
||||
new_me._use_handlers = self._use_handlers
|
||||
new_me._eor = self._eor
|
||||
|
||||
if self._dep_chain is not None:
|
||||
new_me._dep_chain = self._dep_chain[:]
|
||||
|
@ -214,6 +218,7 @@ class Block(Base, Become, Conditional, Taggable):
|
|||
data[attr] = getattr(self, attr)
|
||||
|
||||
data['dep_chain'] = self.get_dep_chain()
|
||||
data['eor'] = self._eor
|
||||
|
||||
if self._role is not None:
|
||||
data['role'] = self._role.serialize()
|
||||
|
@ -241,6 +246,7 @@ class Block(Base, Become, Conditional, Taggable):
|
|||
setattr(self, attr, data.get(attr))
|
||||
|
||||
self._dep_chain = data.get('dep_chain', None)
|
||||
self._eor = data.get('eor', False)
|
||||
|
||||
# if there was a serialized role, unpack it too
|
||||
role_data = data.get('role')
|
||||
|
|
|
@ -408,12 +408,14 @@ class Role(Base, Become, Conditional, Taggable):
|
|||
dep_blocks = dep.compile(play=play, dep_chain=new_dep_chain)
|
||||
block_list.extend(dep_blocks)
|
||||
|
||||
for task_block in self._task_blocks:
|
||||
for idx, task_block in enumerate(self._task_blocks):
|
||||
new_task_block = task_block.copy(exclude_parent=True)
|
||||
if task_block._parent:
|
||||
new_task_block._parent = task_block._parent.copy()
|
||||
new_task_block._dep_chain = new_dep_chain
|
||||
new_task_block._play = play
|
||||
if idx == len(self._task_blocks) - 1:
|
||||
new_task_block._eor = True
|
||||
block_list.append(new_task_block)
|
||||
|
||||
return block_list
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue