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:
parent
9d8bea9d36
commit
463c576a67
2 changed files with 20 additions and 12 deletions
|
@ -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)."
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue