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.