Skip to content

Component overview

Ansible's own engine wires several distinct concerns together at run time: it reads an inventory, gathers facts, resolves variables through a fixed precedence order, renders Jinja2 templates against the result, and — via modules — carries out the actual work. go-ansible keeps that same separation, one Go module per concern, so each piece is independently importable and independently tested against Ansible's real behavior rather than against a reimplementation of a reimplementation.

inventory  →  hosts, groups, group_vars/host_vars
   vars    →  merges inventory vars with facts, play/role/task vars,
              and extra-vars through Ansible's fixed precedence ladder
 template  →  renders {{ }} / {% %} against the merged variable context,
              using Ansible's filter and test library

Each component is usable on its own — vault has no dependency on the other three, and inventory and vars can be used together without template — so a program that only needs Vault-compatible decryption, say, does not pull in a Jinja2 engine it will never call.

Component Depends on Status
vault Real, tested, CI
inventory Real, tested, CI
vars — (consumes inventory's output, but has no import dependency on it) Real, tested, CI
template go-regexp/engine, nikolalohinski/gonja/v2 Real, tested, CI

What is not yet built — module execution, the playbook/role/task engine that would actually drive vars and template together, fact gathering, and the ansible-* CLI binaries — is tracked in Roadmap.