Hooks in Ansible

Hello,

I wonder if you already had some discussions about hooks in Ansible. I tried some research but found nothing useful about what I am looking for.

What I want to do is executing some code at the end of the playbook execution, in other words executing some code at some arbitrary playbook execution step. I wonder if there is some event listener I can subscribe on in order to execute my code.

I don't know if this is good place to discuss about that or if I need to start a thread on devel. If so let me know.

Daniel.

This depends on the use case:

1) To execute the code at the end of the playbook you can use
   *post_tasks*. At some arbitrary playbook execution step use
   *tasks*.

2) To trigger the execution of a code by some events you can use
   the module *wait_for*
   https://docs.ansible.com/ansible/latest/collections/ansible/builtin/wait_for_module.html#ansible-builtin-wait-for-module-waits-for-a-condition-before-continuing
   and *handlers*
   https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html

3) To execute the code after the playbook finished you can use
   *ansible-runner*
   https://ansible-runner.readthedocs.io/en/stable/python_interface/#usage-examples

Thank you for you answer.

I already know *post_tasks*, *handlers*, and *ansible-runner*, but I don't think there are good for what I'm looking for.

You need a bit more context: I have a custom lookup plugin that initialize some data and execute a new process in order to keep these datas available during the playbook life.
I want to be able to send a SIGTERM signal to the process to terminate it at the end of playbook execution.

As I want to share this custom plugin, I don't want any user interaction, because it's not the user role to worry about this extra process.
So *post_tasks*, *handlers*, and *wait_for* are excluded. *ansible-runner* may be a good alternative but I don't want to force users to use *ansible-runner* instead of *ansible*.

I hope it's more clear.

Regards,

Daniel

This seems to be a candidate for *async*
https://docs.ansible.com/ansible/latest/user_guide/playbooks_async.html#run-tasks-concurrently-poll-0

Sounds like you want cache plugins.
https://docs.ansible.com/ansible/latest/plugins/cache.html

Currently my plugin's process has a Time To Live concept to keep data during some customizable duration.
It's pretty similar to what *async* provides but the drawback is that you need to know in advance how many time the execution will take, and that's what I want to avoid.

Regards,

Daniel

Hello, thank you for your answer!

What I understand about cache plugins is that what could interrest me is
fact caching. But as far as I know, lookup plugins can't set facts.

Regards,

Daniel