1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

iptables_state: fix async status call (-> action plugin) (#2711) (#2728)

* fix call to async_status (-> action plugin)

* add changelog fragment

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

* rename a local variable for readability

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 463c576a67)

Co-authored-by: quidame <quidame@poivron.org>
This commit is contained in:
patchback[bot] 2021-06-06 18:10:26 +02:00 committed by GitHub
parent be6d3e9aa1
commit 434ff80ec6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 12 deletions

View file

@ -0,0 +1,4 @@
---
bugfixes:
- "iptables_state - call ``async_status`` action plugin rather than its module
(https://github.com/ansible-collections/community.general/issues/2700)."

View file

@ -40,18 +40,26 @@ class ActionModule(ActionBase):
"(=%s) to 0, and 'async' (=%s) to a value >2 and not greater than " "(=%s) to 0, and 'async' (=%s) to a value >2 and not greater than "
"'ansible_timeout' (=%s) (recommended).") "'ansible_timeout' (=%s) (recommended).")
def _async_result(self, module_args, task_vars, timeout): def _async_result(self, async_status_args, task_vars, timeout):
''' '''
Retrieve results of the asynchonous task, and display them in place of Retrieve results of the asynchonous task, and display them in place of
the async wrapper results (those with the ansible_job_id key). the async wrapper results (those with the ansible_job_id key).
''' '''
async_status = self._task.copy()
async_status.args = async_status_args
async_status.action = 'ansible.builtin.async_status'
async_status.async_val = 0
async_action = self._shared_loader_obj.action_loader.get(
async_status.action, task=async_status, connection=self._connection,
play_context=self._play_context, loader=self._loader, templar=self._templar,
shared_loader_obj=self._shared_loader_obj)
if async_status.args['mode'] == 'cleanup':
return async_action.run(task_vars=task_vars)
# At least one iteration is required, even if timeout is 0. # At least one iteration is required, even if timeout is 0.
for dummy in range(max(1, timeout)): for dummy in range(max(1, timeout)):
async_result = self._execute_module( async_result = async_action.run(task_vars=task_vars)
module_name='ansible.builtin.async_status',
module_args=module_args,
task_vars=task_vars,
wrap_async=False)
if async_result.get('finished', 0) == 1: if async_result.get('finished', 0) == 1:
break break
time.sleep(min(1, timeout)) time.sleep(min(1, timeout))
@ -106,7 +114,7 @@ class ActionModule(ActionBase):
# longer on the controller); and set a backup file path. # longer on the controller); and set a backup file path.
module_args['_timeout'] = task_async module_args['_timeout'] = task_async
module_args['_back'] = '%s/iptables.state' % async_dir module_args['_back'] = '%s/iptables.state' % async_dir
async_status_args = dict(_async_dir=async_dir) async_status_args = dict(mode='status')
confirm_cmd = 'rm -f %s' % module_args['_back'] confirm_cmd = 'rm -f %s' % module_args['_back']
starter_cmd = 'touch %s.starter' % module_args['_back'] starter_cmd = 'touch %s.starter' % module_args['_back']
remaining_time = max(task_async, max_timeout) remaining_time = max(task_async, max_timeout)
@ -168,11 +176,7 @@ class ActionModule(ActionBase):
del result['invocation']['module_args'][key] del result['invocation']['module_args'][key]
async_status_args['mode'] = 'cleanup' async_status_args['mode'] = 'cleanup'
dummy = self._execute_module( dummy = self._async_result(async_status_args, task_vars, 0)
module_name='ansible.builtin.async_status',
module_args=async_status_args,
task_vars=task_vars,
wrap_async=False)
if not wrap_async: if not wrap_async:
# remove a temporary path we created # remove a temporary path we created