PyInfra 3.8.0 ships a large batch of fixes and features across operations, facts, connectors, and docs, plus a switch to full semver.
Key Takeaways
New facts include server.Ports, server.AuthorizedKeys, server.Processes, Docker detail facts (version, container, image, network), and GpgKeyrings.
New operations include files.unarchive, files.download with limit_rate, docker.login/logout, docker.compose, docker.build, and git.repo depth support.
Security hardening: untrusted values now quoted across connectors, operations, and util; user inputs in operations expanded to prevent command injection.
apt.sources gains deb822 format support; apt.key modernized away from deprecated apt-key; apt.packages adds purge option.
Core API decoupled from Click via pluggable output functions; fact and operation modules now lazy-loaded for faster startup.
Hacker News Comment Review
Consensus among experienced Ansible users is that PyInfra’s plain-Python model is a clear usability win over YAML plus Jinja plus a custom DSL, with grep-able source and real type hints.
Commenters note no equivalent of Ansible Tower or Semaphore exists yet for PyInfra, leaving a gap for job orchestration, dashboards, and scheduled runs.
One thread highlights that LLM coding agents (Claude, Codex) still handle Ansible well due to abundant training examples, which may reduce the practical switching incentive for AI-assisted workflows.
Notable Comments
@wowi42: core contributor confirms agentless, no daemon, no central server; “your playbook is just Python. Not Python cosplaying as YAML.”
@Boxxed: “Pyinfra is what ansible should have been. It’s straight python rather than a janky mix of yaml, templates, and bolted-on control flow primitives.”