ansible/ansible
Fun facts
A few interesting things found while reading the tree.
"Genesis."
The very first commit in the repository is timestamped 2012-02-23 14:17:24 -0500 with the one-word message:
Genesis.It's by Michael DeHaan and predates any other commit by less than a minute (Initial library directory lands at 14:18:51). Single-word commits are a small but consistent thread through the project's history — a few thousand commits in, you can still find one-word and one-line summaries on bug-fixes.
The 3,564-line module
lib/ansible/modules/user.py is the largest single file in the tree. It is, ostensibly, "the user module" — but to handle the actual diversity of POSIX user management, it dispatches to per-platform subclasses (Linux, Solaris, FreeBSD, OpenBSD, NetBSD, DragonFly, AIX, HP-UX, BusyBox, OpenWrt, MacOS, AmigaOS) plus distro-specific handling for useradd/usermod/pw/dscl. It has received 7 commits in the last 90 days alone — still actively maintained 14 years on.
The longest-running TODO
A grep for TODO|FIXME|XXX|HACK across lib/ansible/ matches roughly 359 occurrences, mostly clustered in lib/ansible/module_utils/basic.py and the older module_utils/ files that paper over distro and Python-version quirks. Some of these comments date back to before the 2.10 collection split.
Vault format version 1.1 and 1.2 — but not 1.0
The vault file format ships with two header tags in production use today:
$ANSIBLE_VAULT;1.1;AES256
$ANSIBLE_VAULT;1.2;AES256;<vault_id>The format is implemented in lib/ansible/parsing/vault/__init__.py. Format 1.1 was rolled out years ago and 1.2 added the <vault_id> tag so multiple vaults could coexist in one playbook. The original 1.0 still parses for backwards compatibility, but the writer never produces it.
"AnsiBallZ"
The shipping format for tasks is named AnsiBallZ — a deliberately silly portmanteau of "Ansible" and "Ball-Z" (the zip-file the controller builds and slings to remote hosts). The name has stuck since at least the 2.x era; it's a literal string in the code:
lib/ansible/_internal/_ansiballz/_builder.pybuilds the archive.- The remote-side temporary file name is
AnsiballZ_<modulename>.py.
"Genesis" was 14 years ago, the codename is still "TBD"
lib/ansible/release.py contains:
__version__ = '2.22.0.dev0'
__author__ = 'Ansible, Inc.'
__codename__ = "TBD"__codename__ is reserved for an old tradition where each release was named after a song. Recent releases have left it as "TBD" through the development cycle and named it just before final release. Whether that tradition is fully alive depends on which release you look at; the in-flight 2.22 line still has the placeholder.
The repo bootstraps itself
The bin/ directory contains nothing but symlinks. ansible, ansible-playbook, and the others are all symbolic links to source files under lib/ansible/cli/ (and ansible-test to test/lib/ansible_test/_util/target/cli/ansible_test_cli_stub.py). Run hacking/env-setup and they execute directly from your checkout — there's no separate "compile" or "build" step for the controller.
The README is honest
Quoted directly from the README:
This project is substantially coded by humans.
A git log confirms: 0 commits with author/committer ending in [bot], only 1 Co-authored-by: trailer naming a bot in the entire 55,400-commit history. ansible-core remains, on paper at least, an overwhelmingly human-authored codebase — though, as is true everywhere, modern AI assistance leaves no trace in git history.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.