Releases: pyinfra-dev/pyinfra
v3.5.1
Patch release with a bunch of great fixes. But notably want to call out two major changes for anyone working on the pyinfra code itself (huge thank you Daan for implementing these):
- feat: use ruff for linting and formatting (@DonDebonair)
- feat: use uv for project and dependency management (@DonDebonair)
Core fixes:
- api: correctly set context state+host when calling
get_facts - cli: catch exceptions when testing inventory/operation imports
- cli: fix/remove datetime timezone warnings (@wowi42)
- operations/files.block: correct behaviour when markers/block not found and no line provided (@morrison12)
- operations.util.packaging: extend PkgInfo for winget (@rod7760)
- facts/server: support negative value in sysctl (@imlonghao)
Docs:
- docs: fix dynamic execution example (@wowi42)
- docs: Specify how the recursive argument to directory() works (@cliffmccarthy)
- docs: change recommended installation methods (@DonDebonair)
- docs: update writing connectors
Tests:
- op.server.user tests: add exists_noop.json for user existence checks (fix warning) (@maisim)
- op.server.user tests: add noop_description (fix warning) (@maisim)
- fix: add missing command field in test (@maisim)
- tests: clear the host sftp memoization cache before setting up the mock (@wowi42)
- tests: export testgen class to a new package/repo
- tests: fix missing stage sets on state
v3.5
New release with some really awesome new features, brought to you by the fantastic contributions of the community. New stuff:
- add
--diffargument to show file diffs for potential file changes (@jgelens) - add
_retries,_retry_delayand_retry_untilglobal arguments (@shohamd4) - parallelize disconnecting from hosts (@gwelch-contegix)
- enable using SCP instead of SFTP for SSH file transfers (@DonDebonair)
New and updated operations/facts:
- facts/server: add
RebootRequiredfact (@wowi42) - operations/pip: support PEP-508 package versions (@morrison12)
- operations+facts/docker: add Docker plugin support (@DonDebonair)
- operations/files.put: add
atimeandmtimearguments (@vram0gh2) - operations/openrc: support runlevel when enabling services (@sengo4hd)
- facts/yum+dnf+zypper: return
repoidin repository facts
Operation/fact fixes:
- facts/files.File: add ls fallback support (@mrkbac)
- operations/openrc: add missing noop messages (@sengo4hd)
- operations/server.crontab: fix newline when replacing existing values (@Nananas)
- operations/files.block: fix examples doc (@morrison12)
- operations/files.block: fix case where file exists but line is missing (@morrison12)
- operations/files.block: improve handling of special characters in marker lines (@morrison12)
Internal/meta:
- documentation link fix (@sengo4hd)
v3.4.1
v3.4
Much delayed 3.4, great collection of additions and improvements. Huge THANK YOU to all contributors as always. New features:
New and updated operations/facts:
- operations/docker.network: add support for aux addresses (@DonDebonair)
- operations/files: try multiple hash functions in
files.get+files.put(@mrkbac) - operations/files.download: add
temp_dirargument (@scy) - operations/files.download: add
extra_curl_argsandextra_wget_argsarguments (@jgelens) - operations/flatpak: add remote support (@Griffoen)
- operations/git + facts/git: add
GitTagfact and support tag checkout (@wowi42) - operations/server.mount: add support for FreeBSD mounts (@DtxdF)
- facts/server: add
server.Portfact to find process listening on port (@missytake)
Operation/fact fixes:
- operations/docker: handle case where no docker containers/etc exist (@wowi42)
- operations/files + operations/crontab: fix deletion of lines when
present=False(@bad) - operations/files.block: avoid use of non-POSIX
chown -n - operations/files.put: fix copying of local file mode (@vram0gh2)
- operations/server.user: fix appending of user groups (@aaron-riact)
- facts/server.Mounts: fix whitespace and escaped character parsing (@lemmi)
- facts/systemd: treat mounted units as active
Internal/meta:
- remove unncessary setuptools runtime dependency (@karlicoss)
v3.3.1
v3.3
Second release of 2025: loads of adds, fixes and documentation improvements. A huge THANK YOU to all contributors. Slightly changed format for the change list based on commit messages which should speed up releases:
New operations & arguments:
- operations/freebsd: add FreeBSD operations & facts (@DtxdF)
- operations/files.move: new operation (@Pirols)
- operations/server.user: enable adding user to secondary groups (Pirols)
- operations/postgres: enhance role management by adding
ALTER ROLEsupport (@wowi42) - operations/postgres: enable modifying existing postgres databases (@wowi42)
- operations/docker.container: refactor to support container recreation (@minor-fixes)
Operation/fact fixes:
- operations/postgres: fix quoting of locale parameters (@xvello)
- operations/server: remove leftover deprecated parameter (@wowi42)
- operations/pacmen: update PACMAN_REGEX to support additional characters (@wowi42)
- operations/server.sysctl: handle 0 integer values correctly (@lemmi)
- operations/apt: dist-upgrade also supports --autoremove (@bauen1)
- operations/apt: fix parameter name in docs (@bauen1)
- operations/server: fix: lastlog is always null (@ingstem)
- operations/docker: Fixed a typo with the volumes parameter to docker.prune operation (@mpilone)
- facts/xbps.XbpsPackages: allow . in package names (@lemmi)
Connectors, CLI:
- connectors: improve detection of sudo password needed
- connectors/ssh: add support for
ServerAliveInterval(@chipot) - cli: enable -h as shorthand for --help (@NichtJens)
Docs:
- docs: Add a section explaining connector flow (@goetzk)
- docs: Add inventory processing note and reference it (@goetzk)
- docs: Add example of logging to using operations docs (@goetzk)
- docs: fix wrong example operation using forbidden argument 'name' (@robertmx)
- docs: Add a note to the docs about using
_innerwhen calling operations from other operations (@CSDUMMI) - docs: Document host, state, inventory in files.template (@mpilone)
- docs: Minor adjustments to wording help docs and help (@goetzk)
- docs: expand connectors documentation (@goetzk)
- docs: correct import path for any_changed, all_changed (@lemmi)
- docs: Add note re: global arguments to operations (@simonhammes)
Internal/meta:
- refactor: update opkg documentation and add requires_command to ZFS and Git tests (@wowi42)
- Update testing and development dependencies in setup.py (@wowi42)
- tests: Load test specs with PyYAML instead of json (@taliaferro)
- typing: Require explicit override decorator (@bauen1)
- api: don't execute callbacks within a greenlet if we're already in one
- ci: Github Actions support for python 3.12 (@wowi42)
- ci: Prevent docs job from running on forks (@simonhammes)
v3.2
Hello 2025! Here's pyinfra 3.2 - with another incredible round of contributions from the community, THANK YOU ALL. New stuff:
- Add total counts to results summary (@NichtJens)
- Enable passing extra data via
local.include(@TimothyWillard) - Validate inventory files and display warnings for unexpected variables (@simonhammes)
New operations/facts:
- Add
pipxoperations (packages,upgrade_all,ensure_path) facts (PipxPackages,PipxEnvironment) and operations (@maisim) - Add
server.OsReleasefact (@wowi42) - Add
podman.PodmanSystemInfoandpodman.PodmanPsfacts (@bauen1) - Add many extra arguments (including generic args) to
files.FindFiles*facts (@JakkuSakura) - Add
systemargument togit.configoperation (@Pirols) - Add
psql_databaseargument to postgres operations & facts (@hamishfagg) - Add
files.Sha384Filefact andsha384sumargument tofiles.downloadoperation (@simonhammes) - Add
apt.SimulateOperationWillChangefact (@bauen1) - Detect changes in
apt.upgradeandapt.dist_upgradeoperations (@bauen1) - Add
fibootmgr.EFIBootMgrfact (@bauen1) - Add opkg facts and operations (@morrison12)
Fixes:
- Multiple fixes for
server.crontaboperation and facts (@JakkuSakura) - Correctly handle
latestargument with requirements file inpip.packagesoperation (@amiraliakbari) - Fix regex used to parse installed apk packages (@simonhammes)
- Fix SSH connector overwriting known hosts files (@vo452)
Docs/internal tweaks:
- Add type annotations for many more operations (@simonhammes)
- Add typos CI checking to replace flake8-spellcheck (@simonhammes)
- Bump CI actions and dependencies (@simonhammes)
- Require JSON tests to include all arguments
- Remove unused
configparserdependency (@bkmgit) - Many small documentation fixes/tweaks
v3.1.1
- Improve errors with 2.x style
@decorator(vs@decorator()) functions - Document adding custom connectors (@simonhammes)
- Add basic API example to docs (@pirate)
- Fix sphinx warnings (@simonhammes)
- Fix force & pull arguments in
git.worktreeoperation - Fix
server.rebootreconnection (@wackou) - Fix chroot/local connector non-utf file gets (@evoldstad)
- Fix
AptSourcesfact to parse components in order & with digits (@rsfzi)
v3.1
Here's pyinfra 3.1 - a release primarily driven by contributors new and old - a HUGE THANK YOU to all of you who dedicate time to work on pushing pyinfra forward. New stuff:
- Add
zfsoperations (dataset,snapshot,volume,filesystem) facts (Pools,Datasets,Filesystems,Snapshots,Volumes) (@taliaferro) - Add
flatpakoperations (packages) and facts (FlatpakPackage,FlatpakPackages) (@JustScreaMy) - Add
jinja_env_kwargsargument tofiles.templateoperation (@DonDebonair) - Add using dictionaries as
@terraformoutput (map from group -> hosts) - Add default
@terraformoutput key -pyinfra_inventory.value, promote connector to beta - Add support for multiple keys in each
server.authorized_keysfile (@matthijskooijman) - Add print all dependency versions with
--supportflag (@kytta)
Fixes:
- Fix when
ssh_hostnameis set as override data, don't do inventory hostname check - Fix
apt.AptSourcesparsing special characters (@CondensedTea) - Fix
server.rebootconnection detection (@bauen1 + @lemmi) - Fix systemd flagging of sockets running (@bauen1)
- Fix mysql dump quoting (@simonhammes)
- Fix tilde expansion in files facts (@simonhammes)
- Fix host lookup check with SSH alias config (@simonhammes)
- Fix crontab comparison (@andrew-d)
Docs/internal tweaks:
- Improve operations documentation (@bauen1)
- Default to local machine if
user_nameset in systecmt (@bauen1) - Improve efficiency of Docker operations (@apecnascimento)
- Shallow copy
host.datadata to mutation