Skip to content

Commit

Permalink
feat(wait_task): Add a wait_task module.
Browse files Browse the repository at this point in the history
And a new module that simply expose the wait_for_task function

Signed-off-by: Julien Godin <[email protected]>
  • Loading branch information
JGodin-C2C committed Jul 20, 2023
1 parent 7e36b39 commit ef9df5a
Show file tree
Hide file tree
Showing 7 changed files with 171 additions and 0 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ theforeman.foreman Release Notes

This changelog describes changes after version 0.8.1.

v3.13.0
=======

Minor Changes
-------------

- Add a wait for task module

v3.12.0
=======

Expand Down
5 changes: 5 additions & 0 deletions changelogs/changelog.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -623,6 +623,11 @@ releases:
- 2023-06-26-forgotten-changelogs.yml
- content_view_filter_deb_support.yml
release_date: '2023-07-10'
3.13.0:
changes:
minor_changes:
- Add a wait for task module
release_date: '2023-07-19'
3.2.0:
changes:
bugfixes:
Expand Down
1 change: 1 addition & 0 deletions meta/runtime.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ action_groups:
- templates_import
- user
- usergroup
- wait_task
plugin_routing:
modules:
foreman_architecture:
Expand Down
88 changes: 88 additions & 0 deletions plugins/modules/wait_task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# (c) 2023, Julien Godin <[email protected]>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

from __future__ import absolute_import, division, print_function
__metaclass__ = type

DOCUMENTATION = '''
---
module: wait_task
version_added: 3.13.0
short_description: Wait for a task
description:
- Wait for a task to finish
author:
- "Julien Godin"
options:
task:
description:
- Task to wait for. Typical output of the resource_info module
required: true
type: dict
timeout:
description:
- How much time the task should take to be finished
required: false
type: int
default: 60
extends_documentation_fragment:
- theforeman.foreman.foreman
'''


EXAMPLE = '''
- name: wait for a task to finish in at least 10 seconds
theforeman.foreman.wait_task:
server_url: "https://foreman.example.com"
password: changeme
username: admin
task: "{{ item }}"
timeout: 60
loop: "{{ tasks.resources }}"
'''

RETURN = '''
task:
description: Designated task is finished
returned: success
type: dict
contains:
task: dict
timeout: int
'''


from ansible_collections.theforeman.foreman.plugins.module_utils.foreman_helper import (
ForemanAnsibleModule,
)
class ForemanWaitForTask(ForemanAnsibleModule):
pass

def main():
module = ForemanWaitForTask(
argument_spec = dict(
task = dict(type='dict', required = True ),
timeout = dict(type='int', required = False, default = 60 ),
)
)
module.task_timeout = module.foreman_params['timeout']
with module.api_connection():
module.wait_for_task(module.foreman_params['task'])

if __name__ == "__main__":
main()

1 change: 1 addition & 0 deletions tests/fixtures/apidoc/wait_task.json
59 changes: 59 additions & 0 deletions tests/test_playbooks/tasks/wait_task.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
- name: "Create katello content view version"
vars:
- content_view_name: "Test Content View"
- organization_name: "Test Organization"
- lifecycle_environments: Library
content_view_version:
username: "{{ foreman_username }}"
password: "{{ foreman_password }}"
server_url: "{{ foreman_server_url }}"
validate_certs: "{{ foreman_validate_certs }}"
content_view: "{{ content_view_name }}"
organization: "{{ organization_name }}"
description: "{{ description | default(omit)}}"
version: "{{ version | default(omit)}}"
lifecycle_environments: "{{ lifecycle_environments }}"
force_promote: "{{ force_promote | default(omit) }}"
force_yum_metadata_regeneration: "{{ force_yum_metadata_regeneration | default(omit) }}"
current_lifecycle_environment: "{{ current_lifecycle_environment | default(omit) }}"
state: "{{ state | default(omit) }}"
async: 9999

- name: Wait for API to react
ansible.builtin.pause:
seconds: 10

- name: "Search for previously created task"
resource_info:
username: "{{ foreman_username }}"
password: "{{ foreman_password }}"
server_url: "{{ foreman_server_url }}"
validate_certs: "{{ foreman_validate_certs }}"
resource: foreman_tasks
search: "(label = Actions::Katello::ContentView::Publish and state = running)"

- name: wait for the task to finish
wait_task:
username: "{{ foreman_username }}"
password: "{{ foreman_password }}"
server_url: "{{ foreman_server_url }}"
validate_certs: "{{ foreman_validate_certs }}"
task: "{{ item }}"
timeout: 900
loop: "{{ tasks.resources }}"


- name: "Search for previously created task"
resource_info:
username: "{{ foreman_username }}"
password: "{{ foreman_password }}"
server_url: "{{ foreman_server_url }}"
validate_certs: "{{ foreman_validate_certs }}"
resource: foreman_tasks
search: "(label = Actions::Katello::ContentView::Publish and state = running)"
register: tasks
- assert:
fail_msg: "Verification that '{{ resource }}' resource is not runing anymore"
that: result.resource | lenght == 0
...
9 changes: 9 additions & 0 deletions tests/test_playbooks/wait_task.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
- hosts: localhost
collections:
- theforeman.foreman
gather_facts: false
vars_files:
- vars/server.yml
tasks:
- include_tasks: tasks/wait_task.yml

0 comments on commit ef9df5a

Please sign in to comment.