.. _flow_modules: ======= Modules ======= This in-depth dive helps you understand Ansible's program flow to execute modules. It is written for people working on the portions of the Core Ansible Engine that execute a module. Those writing Ansible Modules may also find this in-depth dive to be of interest, but individuals simply using Ansible Modules will not likely find this to be helpful. .. _flow_types_of_modules: Types of Modules ================ Ansible supports several different types of modules in its code base. Some of these are for backwards compatibility and others are to enable flexibility. .. _flow_action_plugins: Action Plugins -------------- Action Plugins look like modules to end users who are writing :term:`playbooks` but they're distinct entities for the purposes of this document. Action Plugins always execute on the controller and are sometimes able to do all work there (for instance, the ``debug`` Action Plugin which prints some text for the user to see or the ``assert`` Action Plugin which can test whether several values in a playbook satisfy certain criteria.) More often, Action Plugins set up some values on the controller, then invoke an actual module on the managed node that does something with these values. An easy to understand version of this is the :ref:`template Action Plugin