Ansible Plugins (plugins/) π§©ΒΆ
This document is the central reference for plugin types and plugin placement in Infinito.Nexus.
Not to be confused with application addons. This
plugins/directory holds Ansible plugins (action / filter / lookup) that extend the automation engine itself. Some applications also call their own extensions βpluginsβ (e.g. Nextcloud, WordPress). Those application-level extensions, whatever the app calls them natively, are declared through the unifiedmeta/addons/contract, documented in Unified Addons. An app βpluginβ is an addon; an Ansible plugin lives here.
Current Project Layout ποΈΒΆ
plugins/
βββ action/ # custom action plugins
βββ filter/ # custom Jinja2 filters
βββ lookup/ # custom lookup plugins
Configured plugin paths in this repository are defined in ansible.cfg:
action_plugins = ./plugins/actionfilter_plugins = ./plugins/filterlookup_plugins = ./plugins/lookup
All Common Ansible Plugin Types πΒΆ
The table below summarizes common Ansible plugin types and their conventional directory names.
Emoji |
Plugin Type |
Conventional Directory |
Purpose |
|---|---|---|---|
βοΈ |
|
|
Wrap/extend module execution behavior at task runtime. |
π |
|
|
Implement privilege escalation methods. |
πΎ |
|
|
Persist gathered facts and cached data between runs. |
π£ |
|
|
React to play/task events (logging, reporting, notifications). |
π§ |
|
|
Define CLI command transport behavior (mainly network platforms). |
π |
|
|
Control how Ansible connects to targets (ssh, local, etc.). |
π |
|
|
Add Jinja2 filters for data transformation. |
π |
|
|
API transport layer over HTTP(S), mainly for network devices. |
π§ |
|
|
Build dynamic inventories from APIs, services, or files. |
π |
|
|
Resolve dynamic values during playbook processing. |
π°οΈ |
|
|
NETCONF transport integration for network automation. |
π |
|
|
Adjust shell command wrapping/execution behavior. |
π§ |
|
|
Customize task scheduling/execution strategy. |
β |
|
|
Add Jinja2 tests used in conditions and templates. |
π¦ |
|
|
Load variables from custom sources. |
Which Plugin Type to Use π§ΒΆ
action βοΈΒΆ
Use when task execution behavior itself must be changed or wrapped.
Examples:
centralized retry logic (
uri_retry.py),argument normalization before module dispatch,
pre/post task orchestration.
filter πΒΆ
Use for pure data transformation in Jinja2 expressions.
Examples:
mapping/normalizing dictionaries,
deriving computed fields for templates,
deterministic formatting helpers.
lookup πΒΆ
Use when a value must be dynamically resolved at runtime.
Examples:
computing IDs from role metadata,
resolving paths/version data,
reading structured project data for templates/tasks.
callback π£ΒΆ
Use to hook into execution events and shape output/reporting.
inventory π§ΒΆ
Use when host/group data should come from a dynamic source.
strategy π§ ΒΆ
Use to alter how tasks are scheduled/executed across hosts.
vars π¦ΒΆ
Use to load variables from custom backends.
connection, become, shell πππΒΆ
Use to customize low-level execution and privilege mechanics.
cache πΎΒΆ
Use to persist facts/results across runs for performance and consistency.
cliconf, httpapi, netconf π§ππ°οΈΒΆ
Use in network automation contexts requiring protocol-specific transport behavior.
test β
ΒΆ
Use to add custom Jinja2 test operators for conditional logic.
Best Practices π§ͺΒΆ
Keep plugin interfaces explicit and stable.
Keep plugin logic focused; move shared logic to
utils/.Add unit tests for plugin behavior and integration tests for end-to-end flows.
Prefer deterministic outputs and avoid hidden global state.
Document any plugin-specific task arguments in the plugin docstring and README.
References πΒΆ
Ansible plugin development: docs.ansible.com
Ansible plugin index (all types): docs.ansible.com
Ansible
ansible-docplugin types:ansible-doc -t ...