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)

* 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>
This commit is contained in:
quidame 2021-06-06 08:20:52 +02:00 committed by GitHub
parent 9d8bea9d36
commit 463c576a67
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