<!-- Canonical: https://termyapp.com/automation-compatibility -->

# Automation compatibility.

Contract

Fail closed

Verified

23 July 2026

## A documented subset, not ansible-playbook

Termy runs a finite subset of Ansible playbook YAML through its own SSH engine. It does not embed `ansible-playbook` and does not promise general Ansible compatibility. Before any host is contacted, the in-app preflight marks every step Supported, Conditional, or Blocked.

Unknown or unsupported behavior blocks the entire run. Termy never silently skips a step and continues with a partial production change.

## 01. Supported execution model

-   Plays, variables, facts, passwordless sudo become, handlers, block/rescue/always, serial batches, and module defaults.
-   Conditions, loops, register, task/block tags, notify/listen, retries, environment, no\_log, delegate\_to, run\_once, dry-run, diff, and throttle.
-   Static inventory and inventory-script JSON, group\_vars, host\_vars, roles, static imports/includes, project assets, Ansible Vault AES256, and configured HashiCorp Vault lookups.
-   Fully qualified module names only when they resolve to a Termy built-in module listed below.

## 02. Built-in modules

`command`, `shell`, `raw`, `file`, `copy`, `template`, `lineinfile`, `get_url`, `service`, `systemd`, `apt`, `package`, `setup`, `debug`, `stat`, `user`, `group`, `set_fact`, `include_vars`, `fail`, `assert`, `replace`, `blockinfile`, `git`, `unarchive`, `pip`, `cron`, `uri`, `apt_key`, `apt_repository`, `docker_compose_v2`, `postgresql_user`, `postgresql_pg_hba`, `fetch`, `ufw`.

Each module validates a finite argument set. A listed name does not imply support for every upstream Ansible parameter.

## 03. Conditional steps

Steps controlled by when, loops, retries/until, handlers, block-rescue paths, or dynamic include\_tasks are marked Conditional. Project requirements.yml files are also reported because Termy does not run ansible-galaxy; dependencies must already be present.

## 04. Blocked before SSH

-   Unknown modules or keys, multiple modules in one task, invalid arguments, malformed YAML, and unsupported templates or expressions.
-   Unsupported directives including async, poll, timeout, remote\_user, port, delegate\_facts, collections, action, local\_action, and debugger.
-   Play-level tags, role-level when/tags, block-level ignore\_errors, extended loop variables, unsupported connections, and module-default groups.
-   Inventory plugins, unresolved role meta dependencies, and dynamic imports other than conditional include\_tasks.
-   roles and vars\_files in the single-file editor; import a project folder so Termy can resolve and validate them.

## 05. Compatibility promise

This is Termy's contract, not upstream Ansible's. A construct absent from the supported sections remains unsupported until the preflight accepts it and regression coverage exists.

---

Official source: [Automation Compatibility — Termy](https://termyapp.com/automation-compatibility)
