# ๐Ÿงฉ Ansible Plugins (`plugins/`) This document is the central reference for plugin types and plugin placement in Infinito.Nexus. ## ๐Ÿ—‚๏ธ Current Project Layout ```text 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/action` - `filter_plugins = ./plugins/filter` - `lookup_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 | | --- | --- | --- | --- | | โš™๏ธ | `action` | `action_plugins/` or `plugins/action/` | Wrap/extend module execution behavior at task runtime. | | ๐Ÿ” | `become` | `become_plugins/` | Implement privilege escalation methods. | | ๐Ÿ’พ | `cache` | `cache_plugins/` | Persist gathered facts and cached data between runs. | | ๐Ÿ“ฃ | `callback` | `callback_plugins/` | React to play/task events (logging, reporting, notifications). | | ๐Ÿ–ง | `cliconf` | `cliconf_plugins/` | Define CLI command transport behavior (mainly network platforms). | | ๐Ÿ”Œ | `connection` | `connection_plugins/` | Control how Ansible connects to targets (ssh, local, etc.). | | ๐Ÿ” | `filter` | `filter_plugins/` or `plugins/filter/` | Add Jinja2 filters for data transformation. | | ๐ŸŒ | `httpapi` | `httpapi_plugins/` | API transport layer over HTTP(S), mainly for network devices. | | ๐Ÿงญ | `inventory` | `inventory_plugins/` | Build dynamic inventories from APIs, services, or files. | | ๐Ÿ‘‰ | `lookup` | `lookup_plugins/` or `plugins/lookup/` | Resolve dynamic values during playbook processing. | | ๐Ÿ›ฐ๏ธ | `netconf` | `netconf_plugins/` | NETCONF transport integration for network automation. | | ๐Ÿš | `shell` | `shell_plugins/` | Adjust shell command wrapping/execution behavior. | | ๐Ÿง  | `strategy` | `strategy_plugins/` | Customize task scheduling/execution strategy. | | โœ… | `test` | `test_plugins/` | Add Jinja2 tests used in conditions and templates. | | ๐Ÿ“ฆ | `vars` | `vars_plugins/` | 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: - Ansible plugin index (all types): - Ansible `ansible-doc` plugin types: `ansible-doc -t ...`