pyinfra 3.5__tar.gz → 3.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1390) hide show
  1. pyinfra-3.6/.editorconfig +3 -0
  2. pyinfra-3.6/.git-blame-ignore-revs +5 -0
  3. pyinfra-3.6/.github/FUNDING.yml +1 -0
  4. pyinfra-3.6/.github/ISSUE_TEMPLATE/bug_report.md +26 -0
  5. pyinfra-3.6/.github/ISSUE_TEMPLATE/config.yml +10 -0
  6. pyinfra-3.6/.github/ISSUE_TEMPLATE/feature_request.md +12 -0
  7. pyinfra-3.6/.github/PULL_REQUEST_TEMPLATE.md +15 -0
  8. pyinfra-3.6/.github/workflows/docs.yml +56 -0
  9. pyinfra-3.6/.github/workflows/test.yml +124 -0
  10. pyinfra-3.6/.gitignore +36 -0
  11. pyinfra-3.6/.typos.toml +21 -0
  12. pyinfra-3.6/CHANGELOG.md +364 -0
  13. pyinfra-3.6/CONTRIBUTING.md +5 -0
  14. pyinfra-3.6/PKG-INFO +142 -0
  15. pyinfra-3.6/README.md +105 -0
  16. pyinfra-3.6/codecov.yml +6 -0
  17. pyinfra-3.6/docs/api/connectors.md +260 -0
  18. pyinfra-3.6/docs/api/deploys.md +64 -0
  19. pyinfra-3.6/docs/api/facts.md +96 -0
  20. pyinfra-3.6/docs/api/index.rst +66 -0
  21. pyinfra-3.6/docs/api/operations.md +79 -0
  22. pyinfra-3.6/docs/api/reference.rst +23 -0
  23. pyinfra-3.6/docs/arguments.rst +9 -0
  24. pyinfra-3.6/docs/changes.rst +5 -0
  25. pyinfra-3.6/docs/cli.md +180 -0
  26. pyinfra-3.6/docs/compatibility.md +103 -0
  27. pyinfra-3.6/docs/conf.py +113 -0
  28. pyinfra-3.6/docs/connectors.rst +56 -0
  29. pyinfra-3.6/docs/contributing.md +100 -0
  30. pyinfra-3.6/docs/deploy-process.rst +181 -0
  31. pyinfra-3.6/docs/examples/client_side_assets.md +16 -0
  32. pyinfra-3.6/docs/examples/data_multiple_environments.md +38 -0
  33. pyinfra-3.6/docs/examples/dynamic_execution_deploy.md +41 -0
  34. pyinfra-3.6/docs/examples/dynamic_inventories_data.md +45 -0
  35. pyinfra-3.6/docs/examples/groups_roles.md +48 -0
  36. pyinfra-3.6/docs/examples/secret_storage.md +29 -0
  37. pyinfra-3.6/docs/examples.rst +4 -0
  38. pyinfra-3.6/docs/facts.rst +102 -0
  39. pyinfra-3.6/docs/faq.rst +84 -0
  40. pyinfra-3.6/docs/getting-started.rst +113 -0
  41. pyinfra-3.6/docs/index.rst +124 -0
  42. pyinfra-3.6/docs/install.md +170 -0
  43. pyinfra-3.6/docs/inventory-data.rst +160 -0
  44. pyinfra-3.6/docs/operations.rst +73 -0
  45. pyinfra-3.6/docs/performance.rst +9 -0
  46. pyinfra-3.6/docs/static/logo_small.png +0 -0
  47. pyinfra-3.6/docs/static/performance.png +0 -0
  48. pyinfra-3.6/docs/support.md +20 -0
  49. pyinfra-3.6/docs/using-operations.rst +373 -0
  50. pyinfra-3.6/docs/utils.py +13 -0
  51. pyinfra-3.6/examples/README.md +1 -0
  52. pyinfra-3.6/pyinfra-metadata-schema-1.0.0.json +57 -0
  53. pyinfra-3.6/pyinfra-metadata.toml +550 -0
  54. pyinfra-3.6/pyproject.toml +141 -0
  55. pyinfra-3.6/scripts/build-public-docs.sh +61 -0
  56. pyinfra-3.6/scripts/cleanup_words.py +24 -0
  57. pyinfra-3.6/scripts/dev-lint.sh +14 -0
  58. pyinfra-3.6/scripts/dev-test-e2e.sh +14 -0
  59. pyinfra-3.6/scripts/dev-test.sh +8 -0
  60. pyinfra-3.6/scripts/generate_api_docs.py +31 -0
  61. pyinfra-3.6/scripts/generate_arguments_doc.py +92 -0
  62. pyinfra-3.6/scripts/generate_connectors_docs.py +110 -0
  63. pyinfra-3.6/scripts/generate_facts_docs.py +146 -0
  64. pyinfra-3.6/scripts/generate_next_version.py +20 -0
  65. pyinfra-3.6/scripts/generate_operations_docs.py +222 -0
  66. pyinfra-3.6/scripts/generate_redirect_pages.py +42 -0
  67. pyinfra-3.6/scripts/make_github_release.py +46 -0
  68. pyinfra-3.6/scripts/pyinfra-complete.sh +21 -0
  69. pyinfra-3.6/scripts/pyinfra-complete.zsh +28 -0
  70. pyinfra-3.6/scripts/release.sh +27 -0
  71. pyinfra-3.6/scripts/spellcheck.sh +3 -0
  72. pyinfra-3.6/src/pyinfra/__main__.py +4 -0
  73. pyinfra-3.6/src/pyinfra/api/__init__.py +27 -0
  74. pyinfra-3.6/src/pyinfra/api/arguments.py +413 -0
  75. pyinfra-3.6/src/pyinfra/api/exceptions.py +96 -0
  76. pyinfra-3.6/src/pyinfra/api/facts.py +326 -0
  77. pyinfra-3.6/src/pyinfra/api/host.py +463 -0
  78. pyinfra-3.6/src/pyinfra/api/metadata.py +69 -0
  79. pyinfra-3.6/src/pyinfra/api/operation.py +496 -0
  80. pyinfra-3.6/src/pyinfra/api/operations.py +397 -0
  81. pyinfra-3.6/src/pyinfra/api/util.py +470 -0
  82. pyinfra-3.6/src/pyinfra/connectors/chroot.py +212 -0
  83. pyinfra-3.6/src/pyinfra/connectors/docker.py +405 -0
  84. pyinfra-3.6/src/pyinfra/connectors/ssh.py +727 -0
  85. pyinfra-3.6/src/pyinfra/connectors/util.py +417 -0
  86. pyinfra-3.6/src/pyinfra/facts/crontab.py +195 -0
  87. pyinfra-3.6/src/pyinfra/facts/files.py +676 -0
  88. pyinfra-3.6/src/pyinfra/facts/freebsd.py +70 -0
  89. pyinfra-3.6/src/pyinfra/facts/npm.py +38 -0
  90. pyinfra-3.6/src/pyinfra/facts/selinux.py +161 -0
  91. pyinfra-3.6/src/pyinfra/facts/server.py +970 -0
  92. pyinfra-3.6/src/pyinfra/operations/apk.py +99 -0
  93. pyinfra-3.6/src/pyinfra/operations/apt.py +496 -0
  94. pyinfra-3.6/src/pyinfra/operations/brew.py +232 -0
  95. pyinfra-3.6/src/pyinfra/operations/choco.py +61 -0
  96. pyinfra-3.6/src/pyinfra/operations/crontab.py +194 -0
  97. pyinfra-3.6/src/pyinfra/operations/dnf.py +213 -0
  98. pyinfra-3.6/src/pyinfra/operations/docker.py +492 -0
  99. pyinfra-3.6/src/pyinfra/operations/files.py +2014 -0
  100. pyinfra-3.6/src/pyinfra/operations/flatpak.py +95 -0
  101. pyinfra-3.6/src/pyinfra/operations/gem.py +48 -0
  102. pyinfra-3.6/src/pyinfra/operations/git.py +420 -0
  103. pyinfra-3.6/src/pyinfra/operations/iptables.py +312 -0
  104. pyinfra-3.6/src/pyinfra/operations/lxd.py +69 -0
  105. pyinfra-3.6/src/pyinfra/operations/mysql.py +610 -0
  106. pyinfra-3.6/src/pyinfra/operations/opkg.py +89 -0
  107. pyinfra-3.6/src/pyinfra/operations/pacman.py +82 -0
  108. pyinfra-3.6/src/pyinfra/operations/pip.py +206 -0
  109. pyinfra-3.6/src/pyinfra/operations/pipx.py +103 -0
  110. pyinfra-3.6/src/pyinfra/operations/pkg.py +71 -0
  111. pyinfra-3.6/src/pyinfra/operations/pkgin.py +92 -0
  112. pyinfra-3.6/src/pyinfra/operations/postgres.py +437 -0
  113. pyinfra-3.6/src/pyinfra/operations/puppet.py +41 -0
  114. pyinfra-3.6/src/pyinfra/operations/python.py +73 -0
  115. pyinfra-3.6/src/pyinfra/operations/selinux.py +190 -0
  116. pyinfra-3.6/src/pyinfra/operations/server.py +1100 -0
  117. pyinfra-3.6/src/pyinfra/operations/snap.py +118 -0
  118. pyinfra-3.6/src/pyinfra/operations/ssh.py +217 -0
  119. pyinfra-3.6/src/pyinfra/operations/systemd.py +150 -0
  120. pyinfra-3.6/src/pyinfra/operations/sysvinit.py +142 -0
  121. pyinfra-3.6/src/pyinfra/operations/util/docker.py +407 -0
  122. pyinfra-3.6/src/pyinfra/operations/util/files.py +247 -0
  123. pyinfra-3.6/src/pyinfra/operations/util/packaging.py +338 -0
  124. pyinfra-3.6/src/pyinfra/operations/xbps.py +78 -0
  125. pyinfra-3.6/src/pyinfra/operations/yum.py +213 -0
  126. pyinfra-3.6/src/pyinfra/operations/zfs.py +176 -0
  127. pyinfra-3.6/src/pyinfra/operations/zypper.py +193 -0
  128. pyinfra-3.6/src/pyinfra_cli/cli.py +793 -0
  129. pyinfra-3.6/src/pyinfra_cli/main.py +40 -0
  130. pyinfra-3.6/src/pyinfra_cli/util.py +239 -0
  131. pyinfra-3.6/tests/__init__.py +13 -0
  132. pyinfra-3.6/tests/end-to-end/conftest.py +68 -0
  133. pyinfra-3.6/tests/end-to-end/test_e2e_docker.py +58 -0
  134. pyinfra-3.6/tests/end-to-end/test_e2e_local.py +149 -0
  135. pyinfra-3.6/tests/end-to-end/test_e2e_podman.py +14 -0
  136. pyinfra-3.6/tests/end-to-end/test_e2e_ssh.py +133 -0
  137. pyinfra-3.6/tests/facts/apk.ApkPackages/packages.json +34 -0
  138. pyinfra-3.6/tests/facts/apk.ApkPackages/packages_2.json +576 -0
  139. pyinfra-3.6/tests/facts/apt.AptKeys/keys.json +44 -0
  140. pyinfra-3.6/tests/facts/apt.AptSources/component_with_number.json +19 -0
  141. pyinfra-3.6/tests/facts/apt.AptSources/sources.json +44 -0
  142. pyinfra-3.6/tests/facts/apt.SimulateOperationWillChange/upgrade-nochanges.json +22 -0
  143. pyinfra-3.6/tests/facts/apt.SimulateOperationWillChange/upgrade.json +57 -0
  144. pyinfra-3.6/tests/facts/brew.BrewCasks/casks.json +28 -0
  145. pyinfra-3.6/tests/facts/brew.BrewPackages/packages.json +48 -0
  146. pyinfra-3.6/tests/facts/brew.BrewTaps/taps.json +12 -0
  147. pyinfra-3.6/tests/facts/brew.BrewVersion/bad_output.json +8 -0
  148. pyinfra-3.6/tests/facts/brew.BrewVersion/version.json +10 -0
  149. pyinfra-3.6/tests/facts/cargo.CargoPackages/packages.json +14 -0
  150. pyinfra-3.6/tests/facts/choco.ChocoPackages/packages.json +26 -0
  151. pyinfra-3.6/tests/facts/choco.ChocoVersion/version.json +5 -0
  152. pyinfra-3.6/tests/facts/crontab.Crontab/comments.json +33 -0
  153. pyinfra-3.6/tests/facts/crontab.Crontab/simple.json +34 -0
  154. pyinfra-3.6/tests/facts/crontab.Crontab/simple_user.json +29 -0
  155. pyinfra-3.6/tests/facts/deb.DebPackage/package.json +13 -0
  156. pyinfra-3.6/tests/facts/deb.DebPackage/whitespace.json +30 -0
  157. pyinfra-3.6/tests/facts/deb.DebPackages/hold_packages.json +14 -0
  158. pyinfra-3.6/tests/facts/deb.DebPackages/packages.json +18 -0
  159. pyinfra-3.6/tests/facts/dnf.DnfRepositories/repos-with-spaces.json +14 -0
  160. pyinfra-3.6/tests/facts/dnf.DnfRepositories/repos.json +22 -0
  161. pyinfra-3.6/tests/facts/docker.DockerContainer/container.json +11 -0
  162. pyinfra-3.6/tests/facts/docker.DockerContainers/container.json +8 -0
  163. pyinfra-3.6/tests/facts/docker.DockerImages/images.json +8 -0
  164. pyinfra-3.6/tests/facts/docker.DockerPlugin/plugin.json +11 -0
  165. pyinfra-3.6/tests/facts/docker.DockerPlugins/plugins.json +8 -0
  166. pyinfra-3.6/tests/facts/efibootmgr.EFIBootMgr/boot_entries.json +18 -0
  167. pyinfra-3.6/tests/facts/efibootmgr.EFIBootMgr/boot_entries2.json +20 -0
  168. pyinfra-3.6/tests/facts/efibootmgr.EFIBootMgr/boot_entries_complex.json +30 -0
  169. pyinfra-3.6/tests/facts/efibootmgr.EFIBootMgr/not_uefi.json +6 -0
  170. pyinfra-3.6/tests/facts/files.Block/defaults.json +12 -0
  171. pyinfra-3.6/tests/facts/files.Block/no_markers_found.json +8 -0
  172. pyinfra-3.6/tests/facts/files.Block/not_found.json +8 -0
  173. pyinfra-3.6/tests/facts/files.Directory/file.json +8 -0
  174. pyinfra-3.6/tests/facts/files.Directory/link.json +8 -0
  175. pyinfra-3.6/tests/facts/files.Directory/ls_fallback.json +16 -0
  176. pyinfra-3.6/tests/facts/files.Directory/ls_fallback_freebsd.json +16 -0
  177. pyinfra-3.6/tests/facts/files.Directory/ls_fallback_macos.json +16 -0
  178. pyinfra-3.6/tests/facts/files.Directory/valid.json +16 -0
  179. pyinfra-3.6/tests/facts/files.File/directory.json +8 -0
  180. pyinfra-3.6/tests/facts/files.File/invalid_output.json +8 -0
  181. pyinfra-3.6/tests/facts/files.File/link.json +8 -0
  182. pyinfra-3.6/tests/facts/files.File/ls_fallback.json +16 -0
  183. pyinfra-3.6/tests/facts/files.File/ls_fallback_selinux.json +16 -0
  184. pyinfra-3.6/tests/facts/files.File/ls_fallback_time.json +16 -0
  185. pyinfra-3.6/tests/facts/files.File/mode_setgid_setuid.json +16 -0
  186. pyinfra-3.6/tests/facts/files.File/mode_sticky.json +16 -0
  187. pyinfra-3.6/tests/facts/files.File/tilde.json +16 -0
  188. pyinfra-3.6/tests/facts/files.File/tilde_with_space.json +16 -0
  189. pyinfra-3.6/tests/facts/files.File/valid.json +16 -0
  190. pyinfra-3.6/tests/facts/files.File/valid_needs_quotes.json +16 -0
  191. pyinfra-3.6/tests/facts/files.File/valid_with_space.json +16 -0
  192. pyinfra-3.6/tests/facts/files.FileContents/file.json +6 -0
  193. pyinfra-3.6/tests/facts/files.FileContents/no_file.json +6 -0
  194. pyinfra-3.6/tests/facts/files.FindDirectories/directories.json +10 -0
  195. pyinfra-3.6/tests/facts/files.FindFiles/files.json +10 -0
  196. pyinfra-3.6/tests/facts/files.FindFiles/files_with_name.json +13 -0
  197. pyinfra-3.6/tests/facts/files.FindFiles/files_with_name_wildcard.json +13 -0
  198. pyinfra-3.6/tests/facts/files.FindInFile/lines.json +12 -0
  199. pyinfra-3.6/tests/facts/files.FindInFile/lines_interpolate.json +12 -0
  200. pyinfra-3.6/tests/facts/files.FindInFile/lines_no_interpolate.json +12 -0
  201. pyinfra-3.6/tests/facts/files.FindInFile/lines_quote.json +12 -0
  202. pyinfra-3.6/tests/facts/files.FindInFile/no_file.json +6 -0
  203. pyinfra-3.6/tests/facts/files.FindInFile/no_matches.json +8 -0
  204. pyinfra-3.6/tests/facts/files.FindLinks/links.json +10 -0
  205. pyinfra-3.6/tests/facts/files.Flags/bad_output.json +10 -0
  206. pyinfra-3.6/tests/facts/files.Flags/no_flags_set.json +10 -0
  207. pyinfra-3.6/tests/facts/files.Flags/no_output.json +9 -0
  208. pyinfra-3.6/tests/facts/files.Flags/one_flag_set.json +11 -0
  209. pyinfra-3.6/tests/facts/files.Flags/too_much_output.json +11 -0
  210. pyinfra-3.6/tests/facts/files.Flags/two_flags_set.json +12 -0
  211. pyinfra-3.6/tests/facts/files.Link/directory.json +8 -0
  212. pyinfra-3.6/tests/facts/files.Link/file.json +8 -0
  213. pyinfra-3.6/tests/facts/files.Link/ls_fallback.json +17 -0
  214. pyinfra-3.6/tests/facts/files.Link/valid.json +17 -0
  215. pyinfra-3.6/tests/facts/files.Link/valid_centos6.json +17 -0
  216. pyinfra-3.6/tests/facts/files.Md5File/file.json +8 -0
  217. pyinfra-3.6/tests/facts/files.Md5File/file_bsd_style.json +8 -0
  218. pyinfra-3.6/tests/facts/files.Md5File/file_needs_quotes.json +8 -0
  219. pyinfra-3.6/tests/facts/files.Sha1File/file.json +8 -0
  220. pyinfra-3.6/tests/facts/files.Sha1File/file_bsd_style.json +8 -0
  221. pyinfra-3.6/tests/facts/files.Sha1File/file_needs_quotes.json +8 -0
  222. pyinfra-3.6/tests/facts/files.Sha256File/file.json +8 -0
  223. pyinfra-3.6/tests/facts/files.Sha256File/file_bsd_style.json +8 -0
  224. pyinfra-3.6/tests/facts/files.Sha256File/file_needs_quotes.json +8 -0
  225. pyinfra-3.6/tests/facts/files.Sha384File/file.json +8 -0
  226. pyinfra-3.6/tests/facts/files.Sha384File/file_bsd_style.json +8 -0
  227. pyinfra-3.6/tests/facts/files.Sha384File/file_needs_quotes.json +8 -0
  228. pyinfra-3.6/tests/facts/flatpak.FlatpakPackage/kodi.json +32 -0
  229. pyinfra-3.6/tests/facts/flatpak.FlatpakPackage/not_found.json +9 -0
  230. pyinfra-3.6/tests/facts/flatpak.FlatpakPackage/vlc.json +32 -0
  231. pyinfra-3.6/tests/facts/flatpak.FlatpakPackages/packages.json +17 -0
  232. pyinfra-3.6/tests/facts/freebsd.PkgPackage/package-with-jail.json +11 -0
  233. pyinfra-3.6/tests/facts/freebsd.PkgPackage/package.json +8 -0
  234. pyinfra-3.6/tests/facts/freebsd.ServiceScript/found.json +8 -0
  235. pyinfra-3.6/tests/facts/freebsd.ServiceScript/not-found.json +6 -0
  236. pyinfra-3.6/tests/facts/freebsd.ServiceStatus/not-running.json +6 -0
  237. pyinfra-3.6/tests/facts/freebsd.ServiceStatus/running.json +8 -0
  238. pyinfra-3.6/tests/facts/freebsd.Sysrc/found.json +8 -0
  239. pyinfra-3.6/tests/facts/freebsd.Sysrc/not-found.json +6 -0
  240. pyinfra-3.6/tests/facts/gem.GemPackages/packages.json +10 -0
  241. pyinfra-3.6/tests/facts/git.GitBranch/branch.json +9 -0
  242. pyinfra-3.6/tests/facts/git.GitConfig/global.json +10 -0
  243. pyinfra-3.6/tests/facts/git.GitConfig/multi_value.json +14 -0
  244. pyinfra-3.6/tests/facts/git.GitConfig/repo.json +11 -0
  245. pyinfra-3.6/tests/facts/git.GitTag/tag.json +13 -0
  246. pyinfra-3.6/tests/facts/git.GitTrackingBranch/branch.json +9 -0
  247. pyinfra-3.6/tests/facts/git.GitTrackingBranch/branch_behind.json +9 -0
  248. pyinfra-3.6/tests/facts/git.GitTrackingBranch/no_branch.json +9 -0
  249. pyinfra-3.6/tests/facts/gpg.GpgKey/key_from_file.json +24 -0
  250. pyinfra-3.6/tests/facts/gpg.GpgKey/key_from_url.json +24 -0
  251. pyinfra-3.6/tests/facts/gpg.GpgKeys/keys.json +60 -0
  252. pyinfra-3.6/tests/facts/gpg.GpgKeys/keys_keyring.json +45 -0
  253. pyinfra-3.6/tests/facts/gpg.GpgSecretKeys/keys.json +60 -0
  254. pyinfra-3.6/tests/facts/gpg.GpgSecretKeys/keys_keyring.json +45 -0
  255. pyinfra-3.6/tests/facts/hardware.BlockDevices/devices.json +17 -0
  256. pyinfra-3.6/tests/facts/hardware.Cpus/invalid.json +5 -0
  257. pyinfra-3.6/tests/facts/hardware.Cpus/valid.json +5 -0
  258. pyinfra-3.6/tests/facts/hardware.Ipv4Addresses/linux_ip.json +15 -0
  259. pyinfra-3.6/tests/facts/hardware.Ipv4Addrs/linux_ip_multiple.json +16 -0
  260. pyinfra-3.6/tests/facts/hardware.Ipv6Addresses/linux_ip.json +18 -0
  261. pyinfra-3.6/tests/facts/hardware.Ipv6Addrs/linux_ip_multiple.json +22 -0
  262. pyinfra-3.6/tests/facts/hardware.Memory/vmstat_bsd.json +42 -0
  263. pyinfra-3.6/tests/facts/hardware.Memory/vmstat_linux.json +33 -0
  264. pyinfra-3.6/tests/facts/hardware.NetworkDevices/linux_ifconfig.json +89 -0
  265. pyinfra-3.6/tests/facts/hardware.NetworkDevices/linux_ifconfig_multiple.json +197 -0
  266. pyinfra-3.6/tests/facts/hardware.NetworkDevices/linux_ip.json +28 -0
  267. pyinfra-3.6/tests/facts/hardware.NetworkDevices/linux_ip_multiple_addrs.json +36 -0
  268. pyinfra-3.6/tests/facts/hardware.NetworkDevices/linux_ip_multiple_ifaces.json +160 -0
  269. pyinfra-3.6/tests/facts/hardware.NetworkDevices/macos_ifconfig.json +27 -0
  270. pyinfra-3.6/tests/facts/iptables.Ip6tablesChains/chains.json +17 -0
  271. pyinfra-3.6/tests/facts/iptables.Ip6tablesRules/rules.json +24 -0
  272. pyinfra-3.6/tests/facts/iptables.IptablesChains/chains.json +17 -0
  273. pyinfra-3.6/tests/facts/iptables.IptablesRules/rules.json +24 -0
  274. pyinfra-3.6/tests/facts/launchd.LaunchdStatus/services.json +17 -0
  275. pyinfra-3.6/tests/facts/lxd.LxdContainers/stripped.json +16 -0
  276. pyinfra-3.6/tests/facts/mysql.MysqlDatabases/multiple.json +29 -0
  277. pyinfra-3.6/tests/facts/mysql.MysqlDatabases/multiple_custom_connection.json +18 -0
  278. pyinfra-3.6/tests/facts/mysql.MysqlUserGrants/multiple.json +18 -0
  279. pyinfra-3.6/tests/facts/mysql.MysqlUsers/multiple.json +78 -0
  280. pyinfra-3.6/tests/facts/npm.NpmPackages/local_packages.json +13 -0
  281. pyinfra-3.6/tests/facts/npm.NpmPackages/packages.json +12 -0
  282. pyinfra-3.6/tests/facts/openrc.OpenrcEnabled/services.json +18 -0
  283. pyinfra-3.6/tests/facts/openrc.OpenrcEnabled/services_runlevel.json +19 -0
  284. pyinfra-3.6/tests/facts/openrc.OpenrcStatus/services.json +22 -0
  285. pyinfra-3.6/tests/facts/openrc.OpenrcStatus/services_runlevel.json +22 -0
  286. pyinfra-3.6/tests/facts/opkg.OpkgConf/opkg_conf.json +42 -0
  287. pyinfra-3.6/tests/facts/opkg.OpkgFeeds/opkg_feeds.json +51 -0
  288. pyinfra-3.6/tests/facts/opkg.OpkgInstallableArchitectures/opkg_installable_architectures.json +20 -0
  289. pyinfra-3.6/tests/facts/opkg.OpkgPackages/opkg_packages.json +39 -0
  290. pyinfra-3.6/tests/facts/opkg.OpkgUpgradeablePackages/opkg_upgradeable_packages.json +34 -0
  291. pyinfra-3.6/tests/facts/pacman.PacmanPackages/packages.json +56 -0
  292. pyinfra-3.6/tests/facts/pip.Pip3Packages/packages.json +10 -0
  293. pyinfra-3.6/tests/facts/pip.PipPackages/packages.json +10 -0
  294. pyinfra-3.6/tests/facts/pip.PipPackages/packages_pip3.json +11 -0
  295. pyinfra-3.6/tests/facts/pipx.PipxEnvironment/environment.json +22 -0
  296. pyinfra-3.6/tests/facts/pipx.PipxPackages/packages.json +12 -0
  297. pyinfra-3.6/tests/facts/pkg.PkgPackages/packages.json +9 -0
  298. pyinfra-3.6/tests/facts/pkgin.PkginPackages/packages.json +28 -0
  299. pyinfra-3.6/tests/facts/podman.PodmanPs/empty.json +8 -0
  300. pyinfra-3.6/tests/facts/podman.PodmanPs/onecontainer.json +74 -0
  301. pyinfra-3.6/tests/facts/podman.PodmanSystemInfo/info1.json +290 -0
  302. pyinfra-3.6/tests/facts/postgresql.PostgresqlDatabases/multiple.json +42 -0
  303. pyinfra-3.6/tests/facts/postgresql.PostgresqlRoles/multiple.json +40 -0
  304. pyinfra-3.6/tests/facts/postgresql.PostgresqlRoles/multiple_custom_connection.json +44 -0
  305. pyinfra-3.6/tests/facts/rpm.RpmPackage/package.json +12 -0
  306. pyinfra-3.6/tests/facts/rpm.RpmPackageProvides/package.json +11 -0
  307. pyinfra-3.6/tests/facts/rpm.RpmPackages/packages.json +10 -0
  308. pyinfra-3.6/tests/facts/runit.RunitManaged/single.json +11 -0
  309. pyinfra-3.6/tests/facts/runit.RunitManaged/status.json +21 -0
  310. pyinfra-3.6/tests/facts/runit.RunitStatus/single.json +11 -0
  311. pyinfra-3.6/tests/facts/runit.RunitStatus/status.json +23 -0
  312. pyinfra-3.6/tests/facts/selinux.FileContext/file_context.json +13 -0
  313. pyinfra-3.6/tests/facts/selinux.FileContextMapping/found.json +14 -0
  314. pyinfra-3.6/tests/facts/selinux.FileContextMapping/not_found.json +8 -0
  315. pyinfra-3.6/tests/facts/selinux.SEBoolean/get.json +9 -0
  316. pyinfra-3.6/tests/facts/selinux.SEPort/generic_and_specific.json +10 -0
  317. pyinfra-3.6/tests/facts/selinux.SEPort/get_bad_port.json +8 -0
  318. pyinfra-3.6/tests/facts/selinux.SEPort/only_generic.json +9 -0
  319. pyinfra-3.6/tests/facts/selinux.SEPorts/line_noise_input.json +8 -0
  320. pyinfra-3.6/tests/facts/selinux.SEPorts/multiple_single_ports.json +10 -0
  321. pyinfra-3.6/tests/facts/selinux.SEPorts/only_single_port.json +10 -0
  322. pyinfra-3.6/tests/facts/selinux.SEPorts/port_range.json +14 -0
  323. pyinfra-3.6/tests/facts/selinux.SEPorts/single_and_range.json +10 -0
  324. pyinfra-3.6/tests/facts/server.Arch/arch.json +5 -0
  325. pyinfra-3.6/tests/facts/server.Command/command.json +6 -0
  326. pyinfra-3.6/tests/facts/server.Date/date.json +5 -0
  327. pyinfra-3.6/tests/facts/server.Groups/groups.json +13 -0
  328. pyinfra-3.6/tests/facts/server.HasGui/gui_absent.json +5 -0
  329. pyinfra-3.6/tests/facts/server.HasGui/gui_present.json +7 -0
  330. pyinfra-3.6/tests/facts/server.Home/home.json +5 -0
  331. pyinfra-3.6/tests/facts/server.Home/root.json +6 -0
  332. pyinfra-3.6/tests/facts/server.Home/some_user.json +6 -0
  333. pyinfra-3.6/tests/facts/server.Hostname/hostname.json +5 -0
  334. pyinfra-3.6/tests/facts/server.KernelModules/modules.json +40 -0
  335. pyinfra-3.6/tests/facts/server.LinuxDistribution/archlinux.json +36 -0
  336. pyinfra-3.6/tests/facts/server.LinuxDistribution/centos-6.json +19 -0
  337. pyinfra-3.6/tests/facts/server.LinuxDistribution/centos-7.json +46 -0
  338. pyinfra-3.6/tests/facts/server.LinuxDistribution/no_match.json +10 -0
  339. pyinfra-3.6/tests/facts/server.LinuxDistribution/ubuntu.json +21 -0
  340. pyinfra-3.6/tests/facts/server.LinuxGui/gnome_present.json +7 -0
  341. pyinfra-3.6/tests/facts/server.LinuxName/ubuntu.json +8 -0
  342. pyinfra-3.6/tests/facts/server.Locales +17 -0
  343. pyinfra-3.6/tests/facts/server.LsbRelease/release.json +17 -0
  344. pyinfra-3.6/tests/facts/server.Mounts/mounts.json +48 -0
  345. pyinfra-3.6/tests/facts/server.Os/os.json +5 -0
  346. pyinfra-3.6/tests/facts/server.OsVersion/os_version.json +5 -0
  347. pyinfra-3.6/tests/facts/server.Port/empty.json +7 -0
  348. pyinfra-3.6/tests/facts/server.Port/one-process.json +12 -0
  349. pyinfra-3.6/tests/facts/server.Port/two-processes.json +14 -0
  350. pyinfra-3.6/tests/facts/server.RebootRequired/alpine_reboot_required.json +5 -0
  351. pyinfra-3.6/tests/facts/server.RebootRequired/freebsd_reboot_required.json +4 -0
  352. pyinfra-3.6/tests/facts/server.RebootRequired/linux_no_reboot.json +5 -0
  353. pyinfra-3.6/tests/facts/server.RebootRequired/linux_reboot_required.json +5 -0
  354. pyinfra-3.6/tests/facts/server.SecurityLimits/security_limits.json +74 -0
  355. pyinfra-3.6/tests/facts/server.Selinux/no-output.json +10 -0
  356. pyinfra-3.6/tests/facts/server.Selinux/selinux.json +11 -0
  357. pyinfra-3.6/tests/facts/server.Sysctl/sysctl_linux.json +14 -0
  358. pyinfra-3.6/tests/facts/server.Sysctl/sysctl_macos.json +13 -0
  359. pyinfra-3.6/tests/facts/server.TmpDir/default_fallback.json +5 -0
  360. pyinfra-3.6/tests/facts/server.TmpDir/temp_set.json +5 -0
  361. pyinfra-3.6/tests/facts/server.TmpDir/tmp_set.json +5 -0
  362. pyinfra-3.6/tests/facts/server.TmpDir/tmpdir_set.json +5 -0
  363. pyinfra-3.6/tests/facts/server.Users/mixed.json +107 -0
  364. pyinfra-3.6/tests/facts/server.Which/which.json +6 -0
  365. pyinfra-3.6/tests/facts/snap.SnapPackage/lxd.json +73 -0
  366. pyinfra-3.6/tests/facts/snap.SnapPackage/not_found.json +9 -0
  367. pyinfra-3.6/tests/facts/snap.SnapPackage/snapd.json +36 -0
  368. pyinfra-3.6/tests/facts/snap.SnapPackage/vlc.json +42 -0
  369. pyinfra-3.6/tests/facts/snap.SnapPackages/packages.json +19 -0
  370. pyinfra-3.6/tests/facts/systemd.SystemdEnabled/machine_services.json +20 -0
  371. pyinfra-3.6/tests/facts/systemd.SystemdEnabled/root_machine_services.json +20 -0
  372. pyinfra-3.6/tests/facts/systemd.SystemdEnabled/services.json +19 -0
  373. pyinfra-3.6/tests/facts/systemd.SystemdEnabled/user_machine_services.json +20 -0
  374. pyinfra-3.6/tests/facts/systemd.SystemdEnabled/user_services.json +20 -0
  375. pyinfra-3.6/tests/facts/systemd.SystemdStatus/machine_services.json +24 -0
  376. pyinfra-3.6/tests/facts/systemd.SystemdStatus/root_machine_services.json +24 -0
  377. pyinfra-3.6/tests/facts/systemd.SystemdStatus/services.json +27 -0
  378. pyinfra-3.6/tests/facts/systemd.SystemdStatus/services_invalid_output.json +25 -0
  379. pyinfra-3.6/tests/facts/systemd.SystemdStatus/user_machine_services.json +24 -0
  380. pyinfra-3.6/tests/facts/systemd.SystemdStatus/user_services.json +24 -0
  381. pyinfra-3.6/tests/facts/sysvinit.InitdStatus/services.json +13 -0
  382. pyinfra-3.6/tests/facts/upstart.UpstartStatus/services.json +12 -0
  383. pyinfra-3.6/tests/facts/vzctl.OpenvzContainers/containers.json +14 -0
  384. pyinfra-3.6/tests/facts/xbps.XbpsPackages/dot-in-package-name.json +14 -0
  385. pyinfra-3.6/tests/facts/xbps.XbpsPackages/packages.json +10 -0
  386. pyinfra-3.6/tests/facts/yum.YumRepositories/repos.json +18 -0
  387. pyinfra-3.6/tests/facts/zfs.Datasets/datasets.yaml +26 -0
  388. pyinfra-3.6/tests/facts/zfs.Filesystems/filesystems.yaml +21 -0
  389. pyinfra-3.6/tests/facts/zfs.Pools/pools.yaml +9 -0
  390. pyinfra-3.6/tests/facts/zfs.Snapshots/snapshots.yaml +16 -0
  391. pyinfra-3.6/tests/facts/zfs.Volumes/volumes.yaml +15 -0
  392. pyinfra-3.6/tests/facts/zypper.ZypperRepositories/repos.json +18 -0
  393. pyinfra-3.6/tests/operations/apk.packages/add_packages.json +9 -0
  394. pyinfra-3.6/tests/operations/apk.packages/remove_packages.json +14 -0
  395. pyinfra-3.6/tests/operations/apk.packages/upgrade_packages.json +14 -0
  396. pyinfra-3.6/tests/operations/apk.packages/upgrade_update.json +18 -0
  397. pyinfra-3.6/tests/operations/apk.upgrade/upgrade_available.json +10 -0
  398. pyinfra-3.6/tests/operations/apt.deb/add.json +23 -0
  399. pyinfra-3.6/tests/operations/apt.deb/add_existing.json +20 -0
  400. pyinfra-3.6/tests/operations/apt.deb/download_add.json +30 -0
  401. pyinfra-3.6/tests/operations/apt.deb/remove_existing.json +24 -0
  402. pyinfra-3.6/tests/operations/apt.deb/remove_no_exist.json +21 -0
  403. pyinfra-3.6/tests/operations/apt.dist_upgrade/dist_upgrade.json +11 -0
  404. pyinfra-3.6/tests/operations/apt.dist_upgrade/dist_upgrade_autoremove.json +16 -0
  405. pyinfra-3.6/tests/operations/apt.key/add.json +14 -0
  406. pyinfra-3.6/tests/operations/apt.key/add_exists.json +15 -0
  407. pyinfra-3.6/tests/operations/apt.key/add_keyserver.json +12 -0
  408. pyinfra-3.6/tests/operations/apt.key/add_keyserver_exists.json +14 -0
  409. pyinfra-3.6/tests/operations/apt.key/add_keyserver_multiple.json +12 -0
  410. pyinfra-3.6/tests/operations/apt.key/add_keyserver_multiple_partial.json +14 -0
  411. pyinfra-3.6/tests/operations/apt.key/add_keyserver_no_keyid.json +12 -0
  412. pyinfra-3.6/tests/operations/apt.key/add_no_gpg.json +14 -0
  413. pyinfra-3.6/tests/operations/apt.key/add_url.json +14 -0
  414. pyinfra-3.6/tests/operations/apt.packages/add_package.json +9 -0
  415. pyinfra-3.6/tests/operations/apt.packages/add_package_allow_downgrades.json +12 -0
  416. pyinfra-3.6/tests/operations/apt.packages/add_package_force.json +12 -0
  417. pyinfra-3.6/tests/operations/apt.packages/add_package_no_recommends.json +12 -0
  418. pyinfra-3.6/tests/operations/apt.packages/add_packages.json +17 -0
  419. pyinfra-3.6/tests/operations/apt.packages/install_with_args.json +12 -0
  420. pyinfra-3.6/tests/operations/apt.packages/remove_packages.json +19 -0
  421. pyinfra-3.6/tests/operations/apt.packages/remove_packages_with_args.json +17 -0
  422. pyinfra-3.6/tests/operations/apt.packages/update_cache_old.json +19 -0
  423. pyinfra-3.6/tests/operations/apt.packages/update_cached.json +17 -0
  424. pyinfra-3.6/tests/operations/apt.packages/update_cached_tz.json +17 -0
  425. pyinfra-3.6/tests/operations/apt.packages/update_nocache.json +17 -0
  426. pyinfra-3.6/tests/operations/apt.packages/update_upgrade.json +16 -0
  427. pyinfra-3.6/tests/operations/apt.packages/upgrade_packages.json +17 -0
  428. pyinfra-3.6/tests/operations/apt.ppa/add.json +10 -0
  429. pyinfra-3.6/tests/operations/apt.ppa/remove.json +15 -0
  430. pyinfra-3.6/tests/operations/apt.repo/add.json +12 -0
  431. pyinfra-3.6/tests/operations/apt.repo/add_existing.json +14 -0
  432. pyinfra-3.6/tests/operations/apt.repo/add_filename.json +15 -0
  433. pyinfra-3.6/tests/operations/apt.repo/remove.json +21 -0
  434. pyinfra-3.6/tests/operations/apt.upgrade/upgrade.json +17 -0
  435. pyinfra-3.6/tests/operations/apt.upgrade/upgrade_autoremove.json +11 -0
  436. pyinfra-3.6/tests/operations/brew.cask_upgrade/new_cli_upgrade.json +8 -0
  437. pyinfra-3.6/tests/operations/brew.cask_upgrade/old_cli_upgrade.json +8 -0
  438. pyinfra-3.6/tests/operations/brew.casks/add_casks_upgrade.json +16 -0
  439. pyinfra-3.6/tests/operations/brew.casks/new_cli_add_casks.json +8 -0
  440. pyinfra-3.6/tests/operations/brew.casks/old_cli_add_casks.json +10 -0
  441. pyinfra-3.6/tests/operations/brew.packages/add_packages.json +9 -0
  442. pyinfra-3.6/tests/operations/brew.packages/remove_packages.json +14 -0
  443. pyinfra-3.6/tests/operations/brew.packages/upgrade_packages.json +17 -0
  444. pyinfra-3.6/tests/operations/brew.packages/upgrade_update.json +18 -0
  445. pyinfra-3.6/tests/operations/brew.tap/add_exists.json +10 -0
  446. pyinfra-3.6/tests/operations/brew.tap/add_tap.json +9 -0
  447. pyinfra-3.6/tests/operations/brew.tap/add_tap_bad_url.json +11 -0
  448. pyinfra-3.6/tests/operations/brew.tap/add_tap_no_args.json +9 -0
  449. pyinfra-3.6/tests/operations/brew.tap/add_tap_url.json +14 -0
  450. pyinfra-3.6/tests/operations/brew.tap/add_tap_url_exists.json +15 -0
  451. pyinfra-3.6/tests/operations/brew.tap/add_tap_url_no_src.json +10 -0
  452. pyinfra-3.6/tests/operations/brew.tap/remove_no_exists.json +11 -0
  453. pyinfra-3.6/tests/operations/brew.tap/remove_tap.json +14 -0
  454. pyinfra-3.6/tests/operations/brew.upgrade/upgrade.json +6 -0
  455. pyinfra-3.6/tests/operations/bsdinit.service/disabled.json +20 -0
  456. pyinfra-3.6/tests/operations/bsdinit.service/enabled.json +19 -0
  457. pyinfra-3.6/tests/operations/bsdinit.service/reload.json +17 -0
  458. pyinfra-3.6/tests/operations/bsdinit.service/skip_started.json +11 -0
  459. pyinfra-3.6/tests/operations/bsdinit.service/start.json +12 -0
  460. pyinfra-3.6/tests/operations/bsdinit.service/stop.json +15 -0
  461. pyinfra-3.6/tests/operations/cargo.packages/add_packages.json +12 -0
  462. pyinfra-3.6/tests/operations/cargo.packages/remove_packages.json +17 -0
  463. pyinfra-3.6/tests/operations/choco.install/install.json +6 -0
  464. pyinfra-3.6/tests/operations/choco.packages/add_packages.json +9 -0
  465. pyinfra-3.6/tests/operations/choco.packages/remove_packages.json +14 -0
  466. pyinfra-3.6/tests/operations/crontab.crontab/add.json +12 -0
  467. pyinfra-3.6/tests/operations/crontab.crontab/add_another.json +16 -0
  468. pyinfra-3.6/tests/operations/crontab.crontab/add_existing.json +18 -0
  469. pyinfra-3.6/tests/operations/crontab.crontab/add_existing_int.json +22 -0
  470. pyinfra-3.6/tests/operations/crontab.crontab/add_named.json +27 -0
  471. pyinfra-3.6/tests/operations/crontab.crontab/add_special_time.json +15 -0
  472. pyinfra-3.6/tests/operations/crontab.crontab/add_user.json +15 -0
  473. pyinfra-3.6/tests/operations/crontab.crontab/edit.json +26 -0
  474. pyinfra-3.6/tests/operations/crontab.crontab/edit_named.json +28 -0
  475. pyinfra-3.6/tests/operations/crontab.crontab/edit_special_time.json +21 -0
  476. pyinfra-3.6/tests/operations/crontab.crontab/remove.json +25 -0
  477. pyinfra-3.6/tests/operations/dnf.key/add.json +6 -0
  478. pyinfra-3.6/tests/operations/dnf.packages/add_packages.json +20 -0
  479. pyinfra-3.6/tests/operations/dnf.packages/install_with_args.json +15 -0
  480. pyinfra-3.6/tests/operations/dnf.packages/install_with_nobest.json +15 -0
  481. pyinfra-3.6/tests/operations/dnf.packages/noop_add_package_alias.json +13 -0
  482. pyinfra-3.6/tests/operations/dnf.packages/remove_package.json +25 -0
  483. pyinfra-3.6/tests/operations/dnf.packages/uninstall_with_args.json +20 -0
  484. pyinfra-3.6/tests/operations/dnf.packages/update_clean.json +16 -0
  485. pyinfra-3.6/tests/operations/dnf.repo/add.json +23 -0
  486. pyinfra-3.6/tests/operations/dnf.repo/remove.json +14 -0
  487. pyinfra-3.6/tests/operations/dnf.rpm/add.json +16 -0
  488. pyinfra-3.6/tests/operations/dnf.rpm/add_existing.json +16 -0
  489. pyinfra-3.6/tests/operations/dnf.rpm/add_existing_upgrade.json +15 -0
  490. pyinfra-3.6/tests/operations/dnf.rpm/add_url.json +25 -0
  491. pyinfra-3.6/tests/operations/dnf.rpm/remove.json +20 -0
  492. pyinfra-3.6/tests/operations/docker.container/add_and_start_no_existent_container.json +20 -0
  493. pyinfra-3.6/tests/operations/docker.container/add_container_with_labels.json +19 -0
  494. pyinfra-3.6/tests/operations/docker.container/add_existent_container.json +248 -0
  495. pyinfra-3.6/tests/operations/docker.container/add_no_existent_container.json +19 -0
  496. pyinfra-3.6/tests/operations/docker.container/remove_container.json +248 -0
  497. pyinfra-3.6/tests/operations/docker.container/start_container.json +246 -0
  498. pyinfra-3.6/tests/operations/docker.container/stop_container.json +248 -0
  499. pyinfra-3.6/tests/operations/docker.image/force_pull_image.json +27 -0
  500. pyinfra-3.6/tests/operations/docker.image/image_from_github_registry_exists.json +26 -0
  501. pyinfra-3.6/tests/operations/docker.image/image_with_digest_exists.json +24 -0
  502. pyinfra-3.6/tests/operations/docker.image/image_with_digest_not_exists.json +15 -0
  503. pyinfra-3.6/tests/operations/docker.image/image_with_latest_tag_always_pull.json +27 -0
  504. pyinfra-3.6/tests/operations/docker.image/image_with_specific_tag_exists.json +26 -0
  505. pyinfra-3.6/tests/operations/docker.image/image_with_specific_tag_not_exists.json +15 -0
  506. pyinfra-3.6/tests/operations/docker.image/image_with_tag_and_digest.json +16 -0
  507. pyinfra-3.6/tests/operations/docker.image/image_with_tag_and_digest_different_digest.json +15 -0
  508. pyinfra-3.6/tests/operations/docker.image/image_with_tag_and_digest_different_tag.json +26 -0
  509. pyinfra-3.6/tests/operations/docker.image/image_without_tag_always_pull.json +27 -0
  510. pyinfra-3.6/tests/operations/docker.image/pull_image_from_private_registry.json +15 -0
  511. pyinfra-3.6/tests/operations/docker.image/remove_existing_image.json +26 -0
  512. pyinfra-3.6/tests/operations/docker.image/remove_nonexistent_image.json +13 -0
  513. pyinfra-3.6/tests/operations/docker.network/add_network.json +16 -0
  514. pyinfra-3.6/tests/operations/docker.network/add_network_macvlan_with_aux_addresses.json +21 -0
  515. pyinfra-3.6/tests/operations/docker.network/add_network_with_gateway.json +15 -0
  516. pyinfra-3.6/tests/operations/docker.network/add_network_with_ip_range.json +15 -0
  517. pyinfra-3.6/tests/operations/docker.network/add_network_with_opts.json +16 -0
  518. pyinfra-3.6/tests/operations/docker.network/remove_network.json +14 -0
  519. pyinfra-3.6/tests/operations/docker.plugin/disable_plugin.json +20 -0
  520. pyinfra-3.6/tests/operations/docker.plugin/enable_plugin.json +19 -0
  521. pyinfra-3.6/tests/operations/docker.plugin/install_plugin.json +13 -0
  522. pyinfra-3.6/tests/operations/docker.plugin/install_plugin_disabled.json +14 -0
  523. pyinfra-3.6/tests/operations/docker.plugin/install_plugin_with_alias_and_options.json +18 -0
  524. pyinfra-3.6/tests/operations/docker.plugin/remove_plugin.json +20 -0
  525. pyinfra-3.6/tests/operations/docker.plugin/set_plugin_options.json +31 -0
  526. pyinfra-3.6/tests/operations/docker.plugin/set_plugin_options_disabled_plugin.json +30 -0
  527. pyinfra-3.6/tests/operations/docker.volume/add_volume.json +14 -0
  528. pyinfra-3.6/tests/operations/docker.volume/add_volume_with_driver.json +15 -0
  529. pyinfra-3.6/tests/operations/docker.volume/add_volume_with_labels.json +15 -0
  530. pyinfra-3.6/tests/operations/files.block/add_existing_block_different_content.json +24 -0
  531. pyinfra-3.6/tests/operations/files.block/add_existing_block_different_content_and_backup.json +25 -0
  532. pyinfra-3.6/tests/operations/files.block/add_existing_block_different_content_multiple_lines.json +28 -0
  533. pyinfra-3.6/tests/operations/files.block/add_existing_block_same_content.json +16 -0
  534. pyinfra-3.6/tests/operations/files.block/add_line_given_but_before_eq_after.json +19 -0
  535. pyinfra-3.6/tests/operations/files.block/add_no_content_provided.json +13 -0
  536. pyinfra-3.6/tests/operations/files.block/add_no_existing_block_and_no_line.json +22 -0
  537. pyinfra-3.6/tests/operations/files.block/add_no_existing_block_and_non_str_line_given.json +18 -0
  538. pyinfra-3.6/tests/operations/files.block/add_no_existing_block_line_provided.json +22 -0
  539. pyinfra-3.6/tests/operations/files.block/add_no_existing_block_line_provided_escape_regex.json +23 -0
  540. pyinfra-3.6/tests/operations/files.block/add_no_existing_file.json +22 -0
  541. pyinfra-3.6/tests/operations/files.block/add_no_line_given_but_before_ne_after.json +18 -0
  542. pyinfra-3.6/tests/operations/files.block/remove_but_content_not_none.json +23 -0
  543. pyinfra-3.6/tests/operations/files.block/remove_existing_block.json +22 -0
  544. pyinfra-3.6/tests/operations/files.block/remove_no_existing_block.json +12 -0
  545. pyinfra-3.6/tests/operations/files.block/remove_no_file.json +12 -0
  546. pyinfra-3.6/tests/operations/files.copy/copies_directory.json +22 -0
  547. pyinfra-3.6/tests/operations/files.copy/copies_directory_overwriting.json +21 -0
  548. pyinfra-3.6/tests/operations/files.copy/copies_file.json +19 -0
  549. pyinfra-3.6/tests/operations/files.copy/copies_file_overwriting.json +19 -0
  550. pyinfra-3.6/tests/operations/files.copy/invalid_dest.json +21 -0
  551. pyinfra-3.6/tests/operations/files.copy/invalid_overwrite.json +26 -0
  552. pyinfra-3.6/tests/operations/files.copy/invalid_src.json +21 -0
  553. pyinfra-3.6/tests/operations/files.copy/noop_dest_file_exists.json +24 -0
  554. pyinfra-3.6/tests/operations/files.directory/add.json +19 -0
  555. pyinfra-3.6/tests/operations/files.directory/add_force.json +15 -0
  556. pyinfra-3.6/tests/operations/files.directory/add_force_backup_dir.json +16 -0
  557. pyinfra-3.6/tests/operations/files.directory/add_force_no_backup.json +16 -0
  558. pyinfra-3.6/tests/operations/files.directory/add_with_spaces.json +19 -0
  559. pyinfra-3.6/tests/operations/files.directory/delete.json +18 -0
  560. pyinfra-3.6/tests/operations/files.directory/edit.json +21 -0
  561. pyinfra-3.6/tests/operations/files.directory/edit_with_spaces.json +21 -0
  562. pyinfra-3.6/tests/operations/files.directory/ignore_link_type.json +16 -0
  563. pyinfra-3.6/tests/operations/files.directory/invalid.json +17 -0
  564. pyinfra-3.6/tests/operations/files.directory/invalid_type.json +7 -0
  565. pyinfra-3.6/tests/operations/files.download/download.json +23 -0
  566. pyinfra-3.6/tests/operations/files.download/download_cache_time.json +20 -0
  567. pyinfra-3.6/tests/operations/files.download/download_cache_time_needs_refresh.json +22 -0
  568. pyinfra-3.6/tests/operations/files.download/download_directory.json +18 -0
  569. pyinfra-3.6/tests/operations/files.download/download_existing_checksum.json +34 -0
  570. pyinfra-3.6/tests/operations/files.download/download_extra_args_curl.json +22 -0
  571. pyinfra-3.6/tests/operations/files.download/download_extra_args_wget.json +23 -0
  572. pyinfra-3.6/tests/operations/files.download/download_headers_curl.json +22 -0
  573. pyinfra-3.6/tests/operations/files.download/download_headers_wget.json +23 -0
  574. pyinfra-3.6/tests/operations/files.download/download_insecure_curl.json +20 -0
  575. pyinfra-3.6/tests/operations/files.download/download_insecure_wget.json +21 -0
  576. pyinfra-3.6/tests/operations/files.download/download_needs_quotes.json +23 -0
  577. pyinfra-3.6/tests/operations/files.download/download_no_curl_no_wget.json +24 -0
  578. pyinfra-3.6/tests/operations/files.download/download_proxy_curl.json +20 -0
  579. pyinfra-3.6/tests/operations/files.download/download_proxy_wget.json +21 -0
  580. pyinfra-3.6/tests/operations/files.download/download_wget.json +24 -0
  581. pyinfra-3.6/tests/operations/files.download/download_with_checksums.json +25 -0
  582. pyinfra-3.6/tests/operations/files.download/download_with_checksums_needs_quotes.json +25 -0
  583. pyinfra-3.6/tests/operations/files.download/pathlib_download.json +24 -0
  584. pyinfra-3.6/tests/operations/files.download/skip_existing.json +14 -0
  585. pyinfra-3.6/tests/operations/files.file/add.json +18 -0
  586. pyinfra-3.6/tests/operations/files.file/add_force.json +15 -0
  587. pyinfra-3.6/tests/operations/files.file/add_force_backup_dir.json +16 -0
  588. pyinfra-3.6/tests/operations/files.file/add_force_backup_dir_nested.json +19 -0
  589. pyinfra-3.6/tests/operations/files.file/add_force_no_backup.json +16 -0
  590. pyinfra-3.6/tests/operations/files.file/add_special_chars.json +21 -0
  591. pyinfra-3.6/tests/operations/files.file/add_with_spaces.json +18 -0
  592. pyinfra-3.6/tests/operations/files.file/create_directory.json +18 -0
  593. pyinfra-3.6/tests/operations/files.file/delete.json +18 -0
  594. pyinfra-3.6/tests/operations/files.file/delete_with_spaces.json +18 -0
  595. pyinfra-3.6/tests/operations/files.file/edit.json +21 -0
  596. pyinfra-3.6/tests/operations/files.file/edit_nothing.json +19 -0
  597. pyinfra-3.6/tests/operations/files.file/invalid.json +17 -0
  598. pyinfra-3.6/tests/operations/files.file/invalid_type.json +7 -0
  599. pyinfra-3.6/tests/operations/files.file/touch.json +18 -0
  600. pyinfra-3.6/tests/operations/files.flags/clear_no_flags.json +12 -0
  601. pyinfra-3.6/tests/operations/files.flags/clear_one_flag_already_clear.json +15 -0
  602. pyinfra-3.6/tests/operations/files.flags/clear_one_flag_was_set.json +15 -0
  603. pyinfra-3.6/tests/operations/files.flags/clear_two_flags.json +15 -0
  604. pyinfra-3.6/tests/operations/files.flags/clear_two_flags_already_clear.json +15 -0
  605. pyinfra-3.6/tests/operations/files.flags/clear_two_flags_first_already_clear.json +15 -0
  606. pyinfra-3.6/tests/operations/files.flags/clear_two_flags_second_already_clear.json +15 -0
  607. pyinfra-3.6/tests/operations/files.flags/set_no_flags.json +12 -0
  608. pyinfra-3.6/tests/operations/files.flags/set_one_flag_already_set.json +15 -0
  609. pyinfra-3.6/tests/operations/files.flags/set_one_flag_not_yet_set.json +15 -0
  610. pyinfra-3.6/tests/operations/files.flags/set_two_flags.json +15 -0
  611. pyinfra-3.6/tests/operations/files.flags/set_two_flags_already_set.json +15 -0
  612. pyinfra-3.6/tests/operations/files.flags/set_two_flags_first_already_set.json +15 -0
  613. pyinfra-3.6/tests/operations/files.flags/set_two_flags_second_already_set.json +15 -0
  614. pyinfra-3.6/tests/operations/files.get/create_directory.json +17 -0
  615. pyinfra-3.6/tests/operations/files.get/different_remote.json +22 -0
  616. pyinfra-3.6/tests/operations/files.get/fallback_md5.json +25 -0
  617. pyinfra-3.6/tests/operations/files.get/fallback_sha256.json +28 -0
  618. pyinfra-3.6/tests/operations/files.get/no_change_md5.json +24 -0
  619. pyinfra-3.6/tests/operations/files.get/no_change_sha256.json +27 -0
  620. pyinfra-3.6/tests/operations/files.get/no_local.json +13 -0
  621. pyinfra-3.6/tests/operations/files.get/no_remote.json +11 -0
  622. pyinfra-3.6/tests/operations/files.get/path_with_spaces.json +11 -0
  623. pyinfra-3.6/tests/operations/files.get/path_with_spaces_already_escaped.json +11 -0
  624. pyinfra-3.6/tests/operations/files.get/pathlib_path_with_spaces.json +12 -0
  625. pyinfra-3.6/tests/operations/files.line/add.json +11 -0
  626. pyinfra-3.6/tests/operations/files.line/add_backup.json +14 -0
  627. pyinfra-3.6/tests/operations/files.line/add_existing.json +14 -0
  628. pyinfra-3.6/tests/operations/files.line/add_replace.json +16 -0
  629. pyinfra-3.6/tests/operations/files.line/add_replace_noop.json +15 -0
  630. pyinfra-3.6/tests/operations/files.line/add_with_quote.json +11 -0
  631. pyinfra-3.6/tests/operations/files.line/edit.json +17 -0
  632. pyinfra-3.6/tests/operations/files.line/edit_backup.json +18 -0
  633. pyinfra-3.6/tests/operations/files.line/pathlib_edit.json +17 -0
  634. pyinfra-3.6/tests/operations/files.link/add.json +17 -0
  635. pyinfra-3.6/tests/operations/files.link/add_force.json +16 -0
  636. pyinfra-3.6/tests/operations/files.link/add_force_backup_dir.json +17 -0
  637. pyinfra-3.6/tests/operations/files.link/add_force_no_backup.json +17 -0
  638. pyinfra-3.6/tests/operations/files.link/add_no_target.json +16 -0
  639. pyinfra-3.6/tests/operations/files.link/add_with_spaces.json +17 -0
  640. pyinfra-3.6/tests/operations/files.link/create_directory.json +19 -0
  641. pyinfra-3.6/tests/operations/files.link/delete.json +18 -0
  642. pyinfra-3.6/tests/operations/files.link/edit.json +22 -0
  643. pyinfra-3.6/tests/operations/files.link/edit_nothing.json +19 -0
  644. pyinfra-3.6/tests/operations/files.link/invalid.json +17 -0
  645. pyinfra-3.6/tests/operations/files.link/invalid_type.json +7 -0
  646. pyinfra-3.6/tests/operations/files.link/pathlib_edit.json +22 -0
  647. pyinfra-3.6/tests/operations/files.move/directory.json +19 -0
  648. pyinfra-3.6/tests/operations/files.move/invalid_dest.json +18 -0
  649. pyinfra-3.6/tests/operations/files.move/invalid_src.json +18 -0
  650. pyinfra-3.6/tests/operations/files.move/link.json +21 -0
  651. pyinfra-3.6/tests/operations/files.move/no_conflict.json +18 -0
  652. pyinfra-3.6/tests/operations/files.move/no_overwrite.json +23 -0
  653. pyinfra-3.6/tests/operations/files.move/overwrite.json +21 -0
  654. pyinfra-3.6/tests/operations/files.put/atime_mtime_sub_second.json +31 -0
  655. pyinfra-3.6/tests/operations/files.put/change_atime_eq_mtime_ref_remote.json +37 -0
  656. pyinfra-3.6/tests/operations/files.put/change_mode_owner.json +33 -0
  657. pyinfra-3.6/tests/operations/files.put/change_mode_owner_with_spaces.json +33 -0
  658. pyinfra-3.6/tests/operations/files.put/change_mtime_arg_no_tz.json +37 -0
  659. pyinfra-3.6/tests/operations/files.put/change_mtime_atime_ref_local file.json +44 -0
  660. pyinfra-3.6/tests/operations/files.put/copy_local_permissions.json +26 -0
  661. pyinfra-3.6/tests/operations/files.put/create_directory.json +29 -0
  662. pyinfra-3.6/tests/operations/files.put/different_remote.json +37 -0
  663. pyinfra-3.6/tests/operations/files.put/fallback_md5.json +31 -0
  664. pyinfra-3.6/tests/operations/files.put/fallback_sha256.json +34 -0
  665. pyinfra-3.6/tests/operations/files.put/no_change.json +22 -0
  666. pyinfra-3.6/tests/operations/files.put/no_change_atime_mtime.json +43 -0
  667. pyinfra-3.6/tests/operations/files.put/no_change_md5.json +25 -0
  668. pyinfra-3.6/tests/operations/files.put/no_change_same_mode_as_local.json +29 -0
  669. pyinfra-3.6/tests/operations/files.put/no_change_sha256.json +28 -0
  670. pyinfra-3.6/tests/operations/files.put/no_local.json +7 -0
  671. pyinfra-3.6/tests/operations/files.put/no_remote.json +28 -0
  672. pyinfra-3.6/tests/operations/files.put/path_with_spaces.json +21 -0
  673. pyinfra-3.6/tests/operations/files.put/path_with_spaces_already_escaped.json +21 -0
  674. pyinfra-3.6/tests/operations/files.put/pathlib_with_spaces.json +22 -0
  675. pyinfra-3.6/tests/operations/files.put/upload_to_directory.json +28 -0
  676. pyinfra-3.6/tests/operations/files.replace/no_match.json +10 -0
  677. pyinfra-3.6/tests/operations/files.replace/replace_double_quotes_interpolate.json +14 -0
  678. pyinfra-3.6/tests/operations/files.replace/replace_double_quotes_no_interpolate.json +14 -0
  679. pyinfra-3.6/tests/operations/files.replace/replace_single_quotes_interpolate.json +14 -0
  680. pyinfra-3.6/tests/operations/files.replace/replace_single_quotes_no_interpolate.json +14 -0
  681. pyinfra-3.6/tests/operations/files.replace/simple_interpolate.json +15 -0
  682. pyinfra-3.6/tests/operations/files.replace/simple_no_interpolate.json +15 -0
  683. pyinfra-3.6/tests/operations/files.sync/sync_delete_posix.json +78 -0
  684. pyinfra-3.6/tests/operations/files.sync/sync_delete_windows.json +97 -0
  685. pyinfra-3.6/tests/operations/files.sync/sync_destination_link.json +88 -0
  686. pyinfra-3.6/tests/operations/files.sync/sync_exclude_multiple.json +101 -0
  687. pyinfra-3.6/tests/operations/files.sync/sync_no_destination_exist.json +58 -0
  688. pyinfra-3.6/tests/operations/files.sync/sync_no_local_exist_posix.json +16 -0
  689. pyinfra-3.6/tests/operations/files.sync/sync_no_local_exist_windows.json +16 -0
  690. pyinfra-3.6/tests/operations/files.sync/sync_partial_exists.json +66 -0
  691. pyinfra-3.6/tests/operations/files.sync/sync_special_chars.json +40 -0
  692. pyinfra-3.6/tests/operations/files.template/invalid_template_syntax.json +18 -0
  693. pyinfra-3.6/tests/operations/files.template/no_remote.json +28 -0
  694. pyinfra-3.6/tests/operations/files.template/undefined_template_variable.json +18 -0
  695. pyinfra-3.6/tests/operations/flatpak.packages/install_package.json +10 -0
  696. pyinfra-3.6/tests/operations/flatpak.packages/install_packages.json +16 -0
  697. pyinfra-3.6/tests/operations/flatpak.packages/remove_packages.json +12 -0
  698. pyinfra-3.6/tests/operations/freebsd.freebsd_update.update/update.json +5 -0
  699. pyinfra-3.6/tests/operations/freebsd.pkg.autoremove/autoremove-with-jail.json +8 -0
  700. pyinfra-3.6/tests/operations/freebsd.pkg.autoremove/autoremove.json +5 -0
  701. pyinfra-3.6/tests/operations/freebsd.pkg.clean/clean-all-with-jail.json +9 -0
  702. pyinfra-3.6/tests/operations/freebsd.pkg.clean/clean-all.json +8 -0
  703. pyinfra-3.6/tests/operations/freebsd.pkg.clean/clean-with-jail.json +8 -0
  704. pyinfra-3.6/tests/operations/freebsd.pkg.clean/clean.json +5 -0
  705. pyinfra-3.6/tests/operations/freebsd.pkg.install/install-with-custom-repo.json +14 -0
  706. pyinfra-3.6/tests/operations/freebsd.pkg.install/install-with-jail-and-custom-repo.json +15 -0
  707. pyinfra-3.6/tests/operations/freebsd.pkg.install/install-with-jail.json +14 -0
  708. pyinfra-3.6/tests/operations/freebsd.pkg.install/install.json +11 -0
  709. pyinfra-3.6/tests/operations/freebsd.pkg.remove/remove-with-jail.json +13 -0
  710. pyinfra-3.6/tests/operations/freebsd.pkg.remove/remove.json +10 -0
  711. pyinfra-3.6/tests/operations/freebsd.pkg.update/update.json +5 -0
  712. pyinfra-3.6/tests/operations/freebsd.pkg.upgrade/upgrade.json +5 -0
  713. pyinfra-3.6/tests/operations/freebsd.service.service/custom.json +18 -0
  714. pyinfra-3.6/tests/operations/freebsd.service.service/reload.json +17 -0
  715. pyinfra-3.6/tests/operations/freebsd.service.service/restart.json +17 -0
  716. pyinfra-3.6/tests/operations/freebsd.service.service/start.json +17 -0
  717. pyinfra-3.6/tests/operations/freebsd.service.service/stop.json +17 -0
  718. pyinfra-3.6/tests/operations/freebsd.sysrc.sysrc/add.json +15 -0
  719. pyinfra-3.6/tests/operations/freebsd.sysrc.sysrc/del.json +15 -0
  720. pyinfra-3.6/tests/operations/freebsd.sysrc.sysrc/set.json +15 -0
  721. pyinfra-3.6/tests/operations/freebsd.sysrc.sysrc/sub.json +15 -0
  722. pyinfra-3.6/tests/operations/gem.packages/add_packages.json +9 -0
  723. pyinfra-3.6/tests/operations/gem.packages/remove_packages.json +14 -0
  724. pyinfra-3.6/tests/operations/git.bare_repo/chmod.json +20 -0
  725. pyinfra-3.6/tests/operations/git.bare_repo/delete.json +17 -0
  726. pyinfra-3.6/tests/operations/git.bare_repo/init.json +17 -0
  727. pyinfra-3.6/tests/operations/git.config/add_existing_multi_value.json +15 -0
  728. pyinfra-3.6/tests/operations/git.config/add_first_multi_value.json +14 -0
  729. pyinfra-3.6/tests/operations/git.config/add_second_multi_value.json +16 -0
  730. pyinfra-3.6/tests/operations/git.config/edit_global.json +13 -0
  731. pyinfra-3.6/tests/operations/git.config/edit_system.json +16 -0
  732. pyinfra-3.6/tests/operations/git.config/set_existing_global.json +12 -0
  733. pyinfra-3.6/tests/operations/git.config/set_existing_system.json +15 -0
  734. pyinfra-3.6/tests/operations/git.config/set_global.json +11 -0
  735. pyinfra-3.6/tests/operations/git.config/set_repo.json +19 -0
  736. pyinfra-3.6/tests/operations/git.config/set_system.json +14 -0
  737. pyinfra-3.6/tests/operations/git.repo/branch_pull.json +31 -0
  738. pyinfra-3.6/tests/operations/git.repo/clone.json +18 -0
  739. pyinfra-3.6/tests/operations/git.repo/clone_keyscan.json +25 -0
  740. pyinfra-3.6/tests/operations/git.repo/clone_keyscan_invalid.json +19 -0
  741. pyinfra-3.6/tests/operations/git.repo/rebase.json +22 -0
  742. pyinfra-3.6/tests/operations/git.repo/recursive_submodules.json +24 -0
  743. pyinfra-3.6/tests/operations/git.repo/update_submodules.json +23 -0
  744. pyinfra-3.6/tests/operations/git.worktree/create.json +18 -0
  745. pyinfra-3.6/tests/operations/git.worktree/create_detached.json +19 -0
  746. pyinfra-3.6/tests/operations/git.worktree/create_detached_from_commitish.json +20 -0
  747. pyinfra-3.6/tests/operations/git.worktree/create_existing_branch.json +19 -0
  748. pyinfra-3.6/tests/operations/git.worktree/create_force.json +19 -0
  749. pyinfra-3.6/tests/operations/git.worktree/create_from_commitish.json +19 -0
  750. pyinfra-3.6/tests/operations/git.worktree/create_new_branch.json +24 -0
  751. pyinfra-3.6/tests/operations/git.worktree/create_new_branch_from_commitish.json +25 -0
  752. pyinfra-3.6/tests/operations/git.worktree/pull.json +18 -0
  753. pyinfra-3.6/tests/operations/git.worktree/pull_disable.json +18 -0
  754. pyinfra-3.6/tests/operations/git.worktree/pull_from_bad_remote_branch.json +20 -0
  755. pyinfra-3.6/tests/operations/git.worktree/pull_from_remote_branch.json +21 -0
  756. pyinfra-3.6/tests/operations/git.worktree/pull_rebase from_remote_branch.json +22 -0
  757. pyinfra-3.6/tests/operations/git.worktree/pull_rebase.json +21 -0
  758. pyinfra-3.6/tests/operations/git.worktree/remove.json +16 -0
  759. pyinfra-3.6/tests/operations/git.worktree/remove_force.json +17 -0
  760. pyinfra-3.6/tests/operations/iptables.chain/add_chain.json +15 -0
  761. pyinfra-3.6/tests/operations/iptables.chain/delete_chain.json +16 -0
  762. pyinfra-3.6/tests/operations/iptables.chain/delete_chain_noop.json +13 -0
  763. pyinfra-3.6/tests/operations/iptables.chain/edit_chain.json +16 -0
  764. pyinfra-3.6/tests/operations/iptables.rule/add_log_rule.json +14 -0
  765. pyinfra-3.6/tests/operations/iptables.rule/add_rule.json +26 -0
  766. pyinfra-3.6/tests/operations/iptables.rule/add_to_ports.json +15 -0
  767. pyinfra-3.6/tests/operations/iptables.rule/add_to_source.json +15 -0
  768. pyinfra-3.6/tests/operations/iptables.rule/add_v6_rule.json +17 -0
  769. pyinfra-3.6/tests/operations/iptables.rule/already_absent.json +15 -0
  770. pyinfra-3.6/tests/operations/iptables.rule/already_present.json +18 -0
  771. pyinfra-3.6/tests/operations/iptables.rule/delete_rule.json +20 -0
  772. pyinfra-3.6/tests/operations/iptables.rule/invalid_destination_port.json +10 -0
  773. pyinfra-3.6/tests/operations/iptables.rule/invalid_log_prefix.json +10 -0
  774. pyinfra-3.6/tests/operations/iptables.rule/invalid_source_destination.json +10 -0
  775. pyinfra-3.6/tests/operations/iptables.rule/invalid_to_destination.json +10 -0
  776. pyinfra-3.6/tests/operations/iptables.rule/invalid_to_ports.json +10 -0
  777. pyinfra-3.6/tests/operations/launchd.service/restart.json +17 -0
  778. pyinfra-3.6/tests/operations/launchd.service/restart_stopped.json +20 -0
  779. pyinfra-3.6/tests/operations/launchd.service/start.json +11 -0
  780. pyinfra-3.6/tests/operations/launchd.service/start_running.json +10 -0
  781. pyinfra-3.6/tests/operations/launchd.service/stop.json +14 -0
  782. pyinfra-3.6/tests/operations/lxd.container/add_container.json +12 -0
  783. pyinfra-3.6/tests/operations/lxd.container/already_absent.json +17 -0
  784. pyinfra-3.6/tests/operations/lxd.container/already_present.json +16 -0
  785. pyinfra-3.6/tests/operations/lxd.container/delete_container.json +18 -0
  786. pyinfra-3.6/tests/operations/lxd.container/delete_running_container.json +19 -0
  787. pyinfra-3.6/tests/operations/mysql.database/add.json +15 -0
  788. pyinfra-3.6/tests/operations/mysql.database/add_noop.json +12 -0
  789. pyinfra-3.6/tests/operations/mysql.database/add_privileges.json +22 -0
  790. pyinfra-3.6/tests/operations/mysql.database/delete.json +16 -0
  791. pyinfra-3.6/tests/operations/mysql.database/delete_noop.json +13 -0
  792. pyinfra-3.6/tests/operations/mysql.dump/dump.json +15 -0
  793. pyinfra-3.6/tests/operations/mysql.load/load.json +10 -0
  794. pyinfra-3.6/tests/operations/mysql.load/load_space.json +11 -0
  795. pyinfra-3.6/tests/operations/mysql.privileges/add.json +14 -0
  796. pyinfra-3.6/tests/operations/mysql.privileges/add_all_with_grant_option.json +17 -0
  797. pyinfra-3.6/tests/operations/mysql.privileges/add_database.json +17 -0
  798. pyinfra-3.6/tests/operations/mysql.privileges/add_delete.json +15 -0
  799. pyinfra-3.6/tests/operations/mysql.privileges/add_delete_usage.json +14 -0
  800. pyinfra-3.6/tests/operations/mysql.privileges/add_existing.json +12 -0
  801. pyinfra-3.6/tests/operations/mysql.privileges/add_table.json +18 -0
  802. pyinfra-3.6/tests/operations/mysql.privileges/add_table_invalid.json +21 -0
  803. pyinfra-3.6/tests/operations/mysql.privileges/add_with_grant_option.json +17 -0
  804. pyinfra-3.6/tests/operations/mysql.privileges/delete.json +14 -0
  805. pyinfra-3.6/tests/operations/mysql.privileges/delete_all.json +15 -0
  806. pyinfra-3.6/tests/operations/mysql.privileges/delete_all_with_grant_option.json +15 -0
  807. pyinfra-3.6/tests/operations/mysql.privileges/delete_with_grant_option.json +14 -0
  808. pyinfra-3.6/tests/operations/mysql.privileges/remove_noop.json +12 -0
  809. pyinfra-3.6/tests/operations/mysql.privileges/remove_usage.json +14 -0
  810. pyinfra-3.6/tests/operations/mysql.sql/execute.json +7 -0
  811. pyinfra-3.6/tests/operations/mysql.sql/execute_mysql_kwargs.json +16 -0
  812. pyinfra-3.6/tests/operations/mysql.user/add.json +14 -0
  813. pyinfra-3.6/tests/operations/mysql.user/add_noop.json +12 -0
  814. pyinfra-3.6/tests/operations/mysql.user/add_password.json +18 -0
  815. pyinfra-3.6/tests/operations/mysql.user/add_privileges.json +20 -0
  816. pyinfra-3.6/tests/operations/mysql.user/add_resources.json +18 -0
  817. pyinfra-3.6/tests/operations/mysql.user/add_ssl.json +14 -0
  818. pyinfra-3.6/tests/operations/mysql.user/add_x509.json +15 -0
  819. pyinfra-3.6/tests/operations/mysql.user/add_x509_specified.json +18 -0
  820. pyinfra-3.6/tests/operations/mysql.user/delete.json +17 -0
  821. pyinfra-3.6/tests/operations/mysql.user/invalid_require_cipher.json +11 -0
  822. pyinfra-3.6/tests/operations/mysql.user/invalid_require_issuer.json +11 -0
  823. pyinfra-3.6/tests/operations/mysql.user/invalid_require_subject.json +11 -0
  824. pyinfra-3.6/tests/operations/mysql.user/invalid_require_type.json +10 -0
  825. pyinfra-3.6/tests/operations/mysql.user/remove_noop.json +13 -0
  826. pyinfra-3.6/tests/operations/mysql.user/update_resources.json +24 -0
  827. pyinfra-3.6/tests/operations/mysql.user/update_resources_partial.json +24 -0
  828. pyinfra-3.6/tests/operations/mysql.user/update_ssl.json +18 -0
  829. pyinfra-3.6/tests/operations/mysql.user/update_x509.json +18 -0
  830. pyinfra-3.6/tests/operations/mysql.user/update_x509_specified.json +23 -0
  831. pyinfra-3.6/tests/operations/mysql.user/update_x509_specified_partial.json +23 -0
  832. pyinfra-3.6/tests/operations/npm.packages/add_local_packages.json +17 -0
  833. pyinfra-3.6/tests/operations/npm.packages/add_packages.json +14 -0
  834. pyinfra-3.6/tests/operations/npm.packages/remove_packages.json +18 -0
  835. pyinfra-3.6/tests/operations/openrc.service/disable.json +21 -0
  836. pyinfra-3.6/tests/operations/openrc.service/disable_noop.json +20 -0
  837. pyinfra-3.6/tests/operations/openrc.service/disable_runlevel.json +22 -0
  838. pyinfra-3.6/tests/operations/openrc.service/enable.json +21 -0
  839. pyinfra-3.6/tests/operations/openrc.service/enable_noop.json +20 -0
  840. pyinfra-3.6/tests/operations/openrc.service/enable_runlevel.json +22 -0
  841. pyinfra-3.6/tests/operations/openrc.service/running_noop.json +12 -0
  842. pyinfra-3.6/tests/operations/openrc.service/start.json +13 -0
  843. pyinfra-3.6/tests/operations/openrc.service/stop.json +16 -0
  844. pyinfra-3.6/tests/operations/openrc.service/stopped_noop.json +15 -0
  845. pyinfra-3.6/tests/operations/opkg.packages/add_existing_package.json +12 -0
  846. pyinfra-3.6/tests/operations/opkg.packages/add_multiple_packages.json +12 -0
  847. pyinfra-3.6/tests/operations/opkg.packages/add_one_package.json +12 -0
  848. pyinfra-3.6/tests/operations/opkg.packages/add_with_unallowed_pinning.json +11 -0
  849. pyinfra-3.6/tests/operations/opkg.packages/list_of_nulls_package_list.json +9 -0
  850. pyinfra-3.6/tests/operations/opkg.packages/null_package_list.json +9 -0
  851. pyinfra-3.6/tests/operations/opkg.packages/remove_existing_package.json +13 -0
  852. pyinfra-3.6/tests/operations/opkg.packages/remove_existing_package_and_require_update.json +14 -0
  853. pyinfra-3.6/tests/operations/opkg.packages/remove_not_existing_package.json +13 -0
  854. pyinfra-3.6/tests/operations/opkg.packages/update_then_add_one.json +11 -0
  855. pyinfra-3.6/tests/operations/opkg.update/first_update.json +9 -0
  856. pyinfra-3.6/tests/operations/pacman.packages/add_packages.json +13 -0
  857. pyinfra-3.6/tests/operations/pacman.packages/add_packages_group_expand.json +12 -0
  858. pyinfra-3.6/tests/operations/pacman.packages/remove_packages.json +18 -0
  859. pyinfra-3.6/tests/operations/pacman.packages/remove_packages_expand.json +20 -0
  860. pyinfra-3.6/tests/operations/pacman.packages/upgrade_update.json +21 -0
  861. pyinfra-3.6/tests/operations/pip.packages/add_existing_package_with_url.json +13 -0
  862. pyinfra-3.6/tests/operations/pip.packages/add_new_virtualenv_packages.json +24 -0
  863. pyinfra-3.6/tests/operations/pip.packages/add_packages.json +14 -0
  864. pyinfra-3.6/tests/operations/pip.packages/add_packages_case_insensitive.json +14 -0
  865. pyinfra-3.6/tests/operations/pip.packages/add_virtualenv_packages.json +20 -0
  866. pyinfra-3.6/tests/operations/pip.packages/install_extra_args.json +17 -0
  867. pyinfra-3.6/tests/operations/pip.packages/install_latest_requirements.json +12 -0
  868. pyinfra-3.6/tests/operations/pip.packages/install_requirements.json +11 -0
  869. pyinfra-3.6/tests/operations/pip.packages/install_virtualenv_requirements.json +16 -0
  870. pyinfra-3.6/tests/operations/pip.packages/remove_packages.json +18 -0
  871. pyinfra-3.6/tests/operations/pip.packages/uninstall_requirements.json +12 -0
  872. pyinfra-3.6/tests/operations/pip.packages/use_pip3.json +14 -0
  873. pyinfra-3.6/tests/operations/pip.packages/use_pip3_virtualenv.json +18 -0
  874. pyinfra-3.6/tests/operations/pip.venv/add_virtualenv.json +14 -0
  875. pyinfra-3.6/tests/operations/pip.virtualenv/add_virtualenv.json +13 -0
  876. pyinfra-3.6/tests/operations/pip.virtualenv/add_virtualenv_py3.json +14 -0
  877. pyinfra-3.6/tests/operations/pip.virtualenv/add_with_options.json +16 -0
  878. pyinfra-3.6/tests/operations/pip.virtualenv/already_absent.json +16 -0
  879. pyinfra-3.6/tests/operations/pip.virtualenv/already_present.json +12 -0
  880. pyinfra-3.6/tests/operations/pip.virtualenv/delete_virtualenv.json +17 -0
  881. pyinfra-3.6/tests/operations/pip.virtualenv/present_empty_directory.json +16 -0
  882. pyinfra-3.6/tests/operations/pip.virtualenv/use_stdlib_venv.json +15 -0
  883. pyinfra-3.6/tests/operations/pip.virtualenv/use_stdlib_venv_py3.json +15 -0
  884. pyinfra-3.6/tests/operations/pipx.ensure_path/ensure_path.json +19 -0
  885. pyinfra-3.6/tests/operations/pipx.packages/add_existing_package_with_url.json +9 -0
  886. pyinfra-3.6/tests/operations/pipx.packages/add_nothing.json +9 -0
  887. pyinfra-3.6/tests/operations/pipx.packages/add_package.json +9 -0
  888. pyinfra-3.6/tests/operations/pipx.packages/add_packages.json +10 -0
  889. pyinfra-3.6/tests/operations/pipx.packages/install_extra_args.json +16 -0
  890. pyinfra-3.6/tests/operations/pipx.packages/remove_packages.json +16 -0
  891. pyinfra-3.6/tests/operations/pipx.upgrade_all/upgrade_all.json +9 -0
  892. pyinfra-3.6/tests/operations/pkg.packages/pkg_add_packages.json +21 -0
  893. pyinfra-3.6/tests/operations/pkg.packages/pkg_add_packages_with_installurl.json +23 -0
  894. pyinfra-3.6/tests/operations/pkg.packages/pkg_delete_packages.json +20 -0
  895. pyinfra-3.6/tests/operations/pkg.packages/pkg_install_packages.json +18 -0
  896. pyinfra-3.6/tests/operations/pkg.packages/pkg_remove_packages.json +20 -0
  897. pyinfra-3.6/tests/operations/pkgin.packages/add_packages.json +9 -0
  898. pyinfra-3.6/tests/operations/pkgin.packages/remove_packages.json +14 -0
  899. pyinfra-3.6/tests/operations/pkgin.packages/upgrade_packages.json +14 -0
  900. pyinfra-3.6/tests/operations/pkgin.packages/upgrade_update.json +18 -0
  901. pyinfra-3.6/tests/operations/postgresql.database/add_database.json +11 -0
  902. pyinfra-3.6/tests/operations/postgresql.database/add_database_locales.json +16 -0
  903. pyinfra-3.6/tests/operations/postgresql.database/add_database_owner.json +14 -0
  904. pyinfra-3.6/tests/operations/postgresql.database/remove_database.json +16 -0
  905. pyinfra-3.6/tests/operations/postgresql.database/remove_database_noop.json +13 -0
  906. pyinfra-3.6/tests/operations/postgresql.database/update_database.json +17 -0
  907. pyinfra-3.6/tests/operations/postgresql.database/update_database_noop.json +15 -0
  908. pyinfra-3.6/tests/operations/postgresql.dump/dump.json +17 -0
  909. pyinfra-3.6/tests/operations/postgresql.load/load.json +15 -0
  910. pyinfra-3.6/tests/operations/postgresql.role/role_remove_noop.json +13 -0
  911. pyinfra-3.6/tests/operations/postgresql.role/role_update.json +23 -0
  912. pyinfra-3.6/tests/operations/postgresql.role/role_update_noop.json +19 -0
  913. pyinfra-3.6/tests/operations/postgresql.role/user_add.json +18 -0
  914. pyinfra-3.6/tests/operations/postgresql.role/user_add_no_login.json +14 -0
  915. pyinfra-3.6/tests/operations/postgresql.role/user_add_privileges.json +17 -0
  916. pyinfra-3.6/tests/operations/postgresql.role/user_add_replication.json +15 -0
  917. pyinfra-3.6/tests/operations/postgresql.role/user_add_super.json +14 -0
  918. pyinfra-3.6/tests/operations/postgresql.role/user_remove.json +14 -0
  919. pyinfra-3.6/tests/operations/postgresql.sql/execute.json +12 -0
  920. pyinfra-3.6/tests/operations/puppet.agent/run_agent.json +10 -0
  921. pyinfra-3.6/tests/operations/python.call/call_func.json +10 -0
  922. pyinfra-3.6/tests/operations/python.raise_exception/call_func.json +7 -0
  923. pyinfra-3.6/tests/operations/runit.manage/manage.json +21 -0
  924. pyinfra-3.6/tests/operations/runit.manage/unmanage.json +25 -0
  925. pyinfra-3.6/tests/operations/runit.service/disable.json +28 -0
  926. pyinfra-3.6/tests/operations/runit.service/enable.json +33 -0
  927. pyinfra-3.6/tests/operations/selinux.boolean/bad_value.json +10 -0
  928. pyinfra-3.6/tests/operations/selinux.boolean/change_not_persistent.json +13 -0
  929. pyinfra-3.6/tests/operations/selinux.boolean/change_persistent.json +14 -0
  930. pyinfra-3.6/tests/operations/selinux.boolean/no_change.json +14 -0
  931. pyinfra-3.6/tests/operations/selinux.file_context/change.json +13 -0
  932. pyinfra-3.6/tests/operations/selinux.file_context/no_change.json +13 -0
  933. pyinfra-3.6/tests/operations/selinux.file_context_mapping/add_None.json +11 -0
  934. pyinfra-3.6/tests/operations/selinux.file_context_mapping/add_different.json +15 -0
  935. pyinfra-3.6/tests/operations/selinux.file_context_mapping/add_no_change.json +15 -0
  936. pyinfra-3.6/tests/operations/selinux.file_context_mapping/add_none_existeing.json +15 -0
  937. pyinfra-3.6/tests/operations/selinux.file_context_mapping/delete_existing.json +14 -0
  938. pyinfra-3.6/tests/operations/selinux.file_context_mapping/delete_none_existing.json +15 -0
  939. pyinfra-3.6/tests/operations/selinux.port/add_None.json +10 -0
  940. pyinfra-3.6/tests/operations/selinux.port/add_different.json +19 -0
  941. pyinfra-3.6/tests/operations/selinux.port/add_different_direct.json +17 -0
  942. pyinfra-3.6/tests/operations/selinux.port/add_not_existing.json +17 -0
  943. pyinfra-3.6/tests/operations/selinux.port/add_not_existing_direct.json +17 -0
  944. pyinfra-3.6/tests/operations/selinux.port/add_not_existing_protocol.json +15 -0
  945. pyinfra-3.6/tests/operations/selinux.port/add_same.json +16 -0
  946. pyinfra-3.6/tests/operations/selinux.port/add_same_direct.json +16 -0
  947. pyinfra-3.6/tests/operations/selinux.port/remove_existing.json +17 -0
  948. pyinfra-3.6/tests/operations/selinux.port/remove_existing_direct.json +17 -0
  949. pyinfra-3.6/tests/operations/selinux.port/remove_not_existing.json +16 -0
  950. pyinfra-3.6/tests/operations/selinux.port/remove_not_existing_direct.json +16 -0
  951. pyinfra-3.6/tests/operations/server.group/add.freebsd.json +14 -0
  952. pyinfra-3.6/tests/operations/server.group/add.json +14 -0
  953. pyinfra-3.6/tests/operations/server.group/delete.freebsd.json +15 -0
  954. pyinfra-3.6/tests/operations/server.group/delete.json +15 -0
  955. pyinfra-3.6/tests/operations/server.hostname/hostname_noop.json +12 -0
  956. pyinfra-3.6/tests/operations/server.hostname/hostnamectl_noop.json +11 -0
  957. pyinfra-3.6/tests/operations/server.hostname/set_hostname_bsd.json +21 -0
  958. pyinfra-3.6/tests/operations/server.hostname/set_hostname_linux.json +22 -0
  959. pyinfra-3.6/tests/operations/server.hostname/set_hostnamectl_linux.json +18 -0
  960. pyinfra-3.6/tests/operations/server.locale/add.json +33 -0
  961. pyinfra-3.6/tests/operations/server.locale/remove.json +34 -0
  962. pyinfra-3.6/tests/operations/server.modprobe/add-list.json +11 -0
  963. pyinfra-3.6/tests/operations/server.modprobe/add.json +9 -0
  964. pyinfra-3.6/tests/operations/server.modprobe/add_exists.json +10 -0
  965. pyinfra-3.6/tests/operations/server.modprobe/add_force.json +12 -0
  966. pyinfra-3.6/tests/operations/server.modprobe/add_multiple_exists.json +11 -0
  967. pyinfra-3.6/tests/operations/server.modprobe/remove-list.json +14 -0
  968. pyinfra-3.6/tests/operations/server.modprobe/remove.json +14 -0
  969. pyinfra-3.6/tests/operations/server.mount/mount.json +9 -0
  970. pyinfra-3.6/tests/operations/server.mount/mount_device.json +12 -0
  971. pyinfra-3.6/tests/operations/server.mount/mount_device_fstype.json +13 -0
  972. pyinfra-3.6/tests/operations/server.mount/mount_exists.json +10 -0
  973. pyinfra-3.6/tests/operations/server.mount/mount_options.json +12 -0
  974. pyinfra-3.6/tests/operations/server.mount/remount_options.json +17 -0
  975. pyinfra-3.6/tests/operations/server.mount/unmount.json +14 -0
  976. pyinfra-3.6/tests/operations/server.packages/add_apk_packages.json +19 -0
  977. pyinfra-3.6/tests/operations/server.packages/add_dnf_packages.json +27 -0
  978. pyinfra-3.6/tests/operations/server.packages/add_yum_packages.json +31 -0
  979. pyinfra-3.6/tests/operations/server.reboot/reboot.json +13 -0
  980. pyinfra-3.6/tests/operations/server.script/upload_run.json +27 -0
  981. pyinfra-3.6/tests/operations/server.script_template/script.json +27 -0
  982. pyinfra-3.6/tests/operations/server.security_limit/set.json +17 -0
  983. pyinfra-3.6/tests/operations/server.service/invalid.json +24 -0
  984. pyinfra-3.6/tests/operations/server.service/start_initd.json +25 -0
  985. pyinfra-3.6/tests/operations/server.service/start_initd_service.json +24 -0
  986. pyinfra-3.6/tests/operations/server.service/start_openrc.json +21 -0
  987. pyinfra-3.6/tests/operations/server.service/start_rcd.json +26 -0
  988. pyinfra-3.6/tests/operations/server.service/start_runit.json +33 -0
  989. pyinfra-3.6/tests/operations/server.service/start_systemd.json +21 -0
  990. pyinfra-3.6/tests/operations/server.service/start_upstart.json +22 -0
  991. pyinfra-3.6/tests/operations/server.shell/shell.json +11 -0
  992. pyinfra-3.6/tests/operations/server.shell/single_shell.json +7 -0
  993. pyinfra-3.6/tests/operations/server.sysctl/set.json +11 -0
  994. pyinfra-3.6/tests/operations/server.sysctl/set_list.json +11 -0
  995. pyinfra-3.6/tests/operations/server.sysctl/set_noop.json +12 -0
  996. pyinfra-3.6/tests/operations/server.sysctl/set_noop_string_value.json +12 -0
  997. pyinfra-3.6/tests/operations/server.sysctl/set_noop_zero_int.json +12 -0
  998. pyinfra-3.6/tests/operations/server.sysctl/set_persist.json +19 -0
  999. pyinfra-3.6/tests/operations/server.user/add.freebsd.json +27 -0
  1000. pyinfra-3.6/tests/operations/server.user/add.json +27 -0
  1001. pyinfra-3.6/tests/operations/server.user/add_group_exists.freebsd.json +18 -0
  1002. pyinfra-3.6/tests/operations/server.user/add_group_exists.json +18 -0
  1003. pyinfra-3.6/tests/operations/server.user/add_home_is_link.freebsd.json +20 -0
  1004. pyinfra-3.6/tests/operations/server.user/add_home_is_link.json +20 -0
  1005. pyinfra-3.6/tests/operations/server.user/add_invalid_home_is_file.json +21 -0
  1006. pyinfra-3.6/tests/operations/server.user/add_non_unique.freebsd.json +15 -0
  1007. pyinfra-3.6/tests/operations/server.user/add_non_unique.json +15 -0
  1008. pyinfra-3.6/tests/operations/server.user/append_secondary_existing_groups.json +35 -0
  1009. pyinfra-3.6/tests/operations/server.user/append_secondary_groups.freebsd.json +36 -0
  1010. pyinfra-3.6/tests/operations/server.user/append_secondary_groups.json +36 -0
  1011. pyinfra-3.6/tests/operations/server.user/delete.freebsd.json +19 -0
  1012. pyinfra-3.6/tests/operations/server.user/delete.json +19 -0
  1013. pyinfra-3.6/tests/operations/server.user/edit.freebsd.json +39 -0
  1014. pyinfra-3.6/tests/operations/server.user/edit.json +39 -0
  1015. pyinfra-3.6/tests/operations/server.user/exists_noop.json +25 -0
  1016. pyinfra-3.6/tests/operations/server.user/key_files.json +53 -0
  1017. pyinfra-3.6/tests/operations/server.user/keys.json +43 -0
  1018. pyinfra-3.6/tests/operations/server.user/keys_delete.json +57 -0
  1019. pyinfra-3.6/tests/operations/server.user/keys_nohome.json +42 -0
  1020. pyinfra-3.6/tests/operations/server.user/keys_single.json +43 -0
  1021. pyinfra-3.6/tests/operations/server.wait/port.json +9 -0
  1022. pyinfra-3.6/tests/operations/snap.package/install_package.json +12 -0
  1023. pyinfra-3.6/tests/operations/snap.package/install_package_classic.json +19 -0
  1024. pyinfra-3.6/tests/operations/snap.package/install_package_with_channel.json +13 -0
  1025. pyinfra-3.6/tests/operations/snap.package/install_packages.json +20 -0
  1026. pyinfra-3.6/tests/operations/snap.package/install_refresh_packages.json +29 -0
  1027. pyinfra-3.6/tests/operations/snap.package/refresh_package.json +21 -0
  1028. pyinfra-3.6/tests/operations/snap.package/remove_packages.json +14 -0
  1029. pyinfra-3.6/tests/operations/ssh.command/command.json +7 -0
  1030. pyinfra-3.6/tests/operations/ssh.command/command_quotes.json +7 -0
  1031. pyinfra-3.6/tests/operations/ssh.command/command_user_port.json +11 -0
  1032. pyinfra-3.6/tests/operations/ssh.download/download.json +24 -0
  1033. pyinfra-3.6/tests/operations/ssh.download/download_exists.json +10 -0
  1034. pyinfra-3.6/tests/operations/ssh.download/download_exists_force.json +16 -0
  1035. pyinfra-3.6/tests/operations/ssh.download/download_not_file.json +21 -0
  1036. pyinfra-3.6/tests/operations/ssh.keyscan/scan_not_present.json +17 -0
  1037. pyinfra-3.6/tests/operations/ssh.keyscan/scan_present.json +16 -0
  1038. pyinfra-3.6/tests/operations/ssh.keyscan/scan_present_force.json +23 -0
  1039. pyinfra-3.6/tests/operations/ssh.upload/upload.json +22 -0
  1040. pyinfra-3.6/tests/operations/ssh.upload/upload_remote_sudo.json +11 -0
  1041. pyinfra-3.6/tests/operations/ssh.upload/upload_remote_sudo_user.json +12 -0
  1042. pyinfra-3.6/tests/operations/systemd.service/daemon_reload.json +18 -0
  1043. pyinfra-3.6/tests/operations/systemd.service/disabled.json +21 -0
  1044. pyinfra-3.6/tests/operations/systemd.service/enabled.json +21 -0
  1045. pyinfra-3.6/tests/operations/systemd.service/machine_daemon_reload.json +20 -0
  1046. pyinfra-3.6/tests/operations/systemd.service/machine_disabled.json +22 -0
  1047. pyinfra-3.6/tests/operations/systemd.service/machine_enabled.json +22 -0
  1048. pyinfra-3.6/tests/operations/systemd.service/machine_start.json +17 -0
  1049. pyinfra-3.6/tests/operations/systemd.service/running_ambiguous_unit.json +13 -0
  1050. pyinfra-3.6/tests/operations/systemd.service/running_noop.json +12 -0
  1051. pyinfra-3.6/tests/operations/systemd.service/running_timer.json +13 -0
  1052. pyinfra-3.6/tests/operations/systemd.service/start.json +13 -0
  1053. pyinfra-3.6/tests/operations/systemd.service/stopped_noop.json +15 -0
  1054. pyinfra-3.6/tests/operations/systemd.service/timer.json +13 -0
  1055. pyinfra-3.6/tests/operations/systemd.service/user_daemon_reload.json +19 -0
  1056. pyinfra-3.6/tests/operations/systemd.service/user_disabled.json +22 -0
  1057. pyinfra-3.6/tests/operations/systemd.service/user_enabled.json +22 -0
  1058. pyinfra-3.6/tests/operations/systemd.service/user_machine_daemon_reload.json +21 -0
  1059. pyinfra-3.6/tests/operations/systemd.service/user_machine_disabled.json +24 -0
  1060. pyinfra-3.6/tests/operations/systemd.service/user_machine_enabled.json +24 -0
  1061. pyinfra-3.6/tests/operations/systemd.service/user_machine_start.json +18 -0
  1062. pyinfra-3.6/tests/operations/systemd.service/user_start.json +16 -0
  1063. pyinfra-3.6/tests/operations/sysvinit.enable/create.json +35 -0
  1064. pyinfra-3.6/tests/operations/sysvinit.service/command.json +20 -0
  1065. pyinfra-3.6/tests/operations/sysvinit.service/disabled.json +19 -0
  1066. pyinfra-3.6/tests/operations/sysvinit.service/enabled_chkconfig.json +21 -0
  1067. pyinfra-3.6/tests/operations/sysvinit.service/enabled_rc-update.json +20 -0
  1068. pyinfra-3.6/tests/operations/sysvinit.service/enabled_update-rc.d.json +20 -0
  1069. pyinfra-3.6/tests/operations/sysvinit.service/reload.json +16 -0
  1070. pyinfra-3.6/tests/operations/sysvinit.service/restart.json +16 -0
  1071. pyinfra-3.6/tests/operations/sysvinit.service/restart_down.json +19 -0
  1072. pyinfra-3.6/tests/operations/sysvinit.service/skip_started.json +10 -0
  1073. pyinfra-3.6/tests/operations/sysvinit.service/start.json +11 -0
  1074. pyinfra-3.6/tests/operations/sysvinit.service/stop.json +14 -0
  1075. pyinfra-3.6/tests/operations/upstart.service/disabled.json +21 -0
  1076. pyinfra-3.6/tests/operations/upstart.service/enabled.json +19 -0
  1077. pyinfra-3.6/tests/operations/upstart.service/running.json +11 -0
  1078. pyinfra-3.6/tests/operations/vzctl.create/add_template.json +13 -0
  1079. pyinfra-3.6/tests/operations/vzctl.create/already_existing.json +13 -0
  1080. pyinfra-3.6/tests/operations/vzctl.delete/delete.json +7 -0
  1081. pyinfra-3.6/tests/operations/vzctl.mount/mount.json +7 -0
  1082. pyinfra-3.6/tests/operations/vzctl.restart/restart.json +8 -0
  1083. pyinfra-3.6/tests/operations/vzctl.restart/restart_force.json +11 -0
  1084. pyinfra-3.6/tests/operations/vzctl.set/set.json +10 -0
  1085. pyinfra-3.6/tests/operations/vzctl.set/set_multiple.json +10 -0
  1086. pyinfra-3.6/tests/operations/vzctl.set/set_no_save.json +11 -0
  1087. pyinfra-3.6/tests/operations/vzctl.start/start.json +7 -0
  1088. pyinfra-3.6/tests/operations/vzctl.start/start_force.json +10 -0
  1089. pyinfra-3.6/tests/operations/vzctl.stop/stop.json +7 -0
  1090. pyinfra-3.6/tests/operations/vzctl.unmount/unmount.json +7 -0
  1091. pyinfra-3.6/tests/operations/xbps.packages/add_packages.json +9 -0
  1092. pyinfra-3.6/tests/operations/xbps.packages/remove_packages.json +14 -0
  1093. pyinfra-3.6/tests/operations/xbps.packages/upgrade_update.json +18 -0
  1094. pyinfra-3.6/tests/operations/yum.key/add.json +6 -0
  1095. pyinfra-3.6/tests/operations/yum.packages/add_packages.json +20 -0
  1096. pyinfra-3.6/tests/operations/yum.packages/add_packages_alias.json +14 -0
  1097. pyinfra-3.6/tests/operations/yum.packages/add_packages_alias_different_version.json +16 -0
  1098. pyinfra-3.6/tests/operations/yum.packages/add_packages_alias_multiple_version.json +22 -0
  1099. pyinfra-3.6/tests/operations/yum.packages/install_with_args.json +15 -0
  1100. pyinfra-3.6/tests/operations/yum.packages/install_with_nobest.json +15 -0
  1101. pyinfra-3.6/tests/operations/yum.packages/noop_add_packages_alias.json +15 -0
  1102. pyinfra-3.6/tests/operations/yum.packages/noop_add_packages_alias_multiple_version.json +19 -0
  1103. pyinfra-3.6/tests/operations/yum.packages/remove_package.json +25 -0
  1104. pyinfra-3.6/tests/operations/yum.packages/remove_packages_alias_multiple_version.json +21 -0
  1105. pyinfra-3.6/tests/operations/yum.packages/uninstall_with_args.json +20 -0
  1106. pyinfra-3.6/tests/operations/yum.packages/update_clean.json +16 -0
  1107. pyinfra-3.6/tests/operations/yum.repo/add.json +23 -0
  1108. pyinfra-3.6/tests/operations/yum.repo/add_url.json +16 -0
  1109. pyinfra-3.6/tests/operations/yum.repo/remove.json +14 -0
  1110. pyinfra-3.6/tests/operations/yum.rpm/add.json +16 -0
  1111. pyinfra-3.6/tests/operations/yum.rpm/add_existing.json +16 -0
  1112. pyinfra-3.6/tests/operations/yum.rpm/add_existing_upgrade.json +15 -0
  1113. pyinfra-3.6/tests/operations/yum.rpm/add_url.json +25 -0
  1114. pyinfra-3.6/tests/operations/yum.rpm/remove.json +20 -0
  1115. pyinfra-3.6/tests/operations/zfs.dataset/create.yaml +11 -0
  1116. pyinfra-3.6/tests/operations/zfs.dataset/create_noop.yaml +11 -0
  1117. pyinfra-3.6/tests/operations/zfs.dataset/create_recursive.yaml +10 -0
  1118. pyinfra-3.6/tests/operations/zfs.dataset/create_sparse.yaml +11 -0
  1119. pyinfra-3.6/tests/operations/zfs.dataset/create_volume.yaml +10 -0
  1120. pyinfra-3.6/tests/operations/zfs.dataset/delete.yaml +10 -0
  1121. pyinfra-3.6/tests/operations/zfs.dataset/delete_noop.yaml +8 -0
  1122. pyinfra-3.6/tests/operations/zfs.dataset/delete_recursive.yaml +13 -0
  1123. pyinfra-3.6/tests/operations/zfs.dataset/set_props.yaml +16 -0
  1124. pyinfra-3.6/tests/operations/zfs.filesystem/create.yaml +11 -0
  1125. pyinfra-3.6/tests/operations/zfs.filesystem/delete.yaml +10 -0
  1126. pyinfra-3.6/tests/operations/zfs.snapshot/create.yaml +10 -0
  1127. pyinfra-3.6/tests/operations/zfs.volume/create.yaml +10 -0
  1128. pyinfra-3.6/tests/operations/zypper.key/add.json +6 -0
  1129. pyinfra-3.6/tests/operations/zypper.packages/add_packages.json +16 -0
  1130. pyinfra-3.6/tests/operations/zypper.packages/install_with_args.json +12 -0
  1131. pyinfra-3.6/tests/operations/zypper.packages/install_with_global_args.json +12 -0
  1132. pyinfra-3.6/tests/operations/zypper.packages/uninstall_with_args.json +17 -0
  1133. pyinfra-3.6/tests/operations/zypper.packages/uninstall_with_global_args.json +21 -0
  1134. pyinfra-3.6/tests/operations/zypper.packages/update_clean.json +15 -0
  1135. pyinfra-3.6/tests/operations/zypper.repo/add.json +22 -0
  1136. pyinfra-3.6/tests/operations/zypper.repo/add_url.json +16 -0
  1137. pyinfra-3.6/tests/operations/zypper.repo/remove.json +14 -0
  1138. pyinfra-3.6/tests/operations/zypper.rpm/add.json +16 -0
  1139. pyinfra-3.6/tests/operations/zypper.rpm/add_existing.json +16 -0
  1140. pyinfra-3.6/tests/operations/zypper.rpm/add_existing_upgrade.json +15 -0
  1141. pyinfra-3.6/tests/operations/zypper.rpm/add_url.json +25 -0
  1142. pyinfra-3.6/tests/operations/zypper.rpm/remove.json +20 -0
  1143. pyinfra-3.6/tests/paramiko_util.py +109 -0
  1144. pyinfra-3.6/tests/test_api/test_api_deploys.py +127 -0
  1145. pyinfra-3.6/tests/test_api/test_api_facts.py +338 -0
  1146. pyinfra-3.6/tests/test_api/test_api_operations.py +949 -0
  1147. pyinfra-3.6/tests/test_cli/__init__.py +0 -0
  1148. pyinfra-3.6/tests/test_cli/deploy/deploy.py +90 -0
  1149. pyinfra-3.6/tests/test_cli/deploy/deploy_random.py +83 -0
  1150. pyinfra-3.6/tests/test_cli/deploy/files/a_file +1 -0
  1151. pyinfra-3.6/tests/test_cli/deploy/group_data/all.py +1 -0
  1152. pyinfra-3.6/tests/test_cli/deploy/group_data/invalid.json +0 -0
  1153. pyinfra-3.6/tests/test_cli/deploy/group_data/leftover_data.py +2 -0
  1154. pyinfra-3.6/tests/test_cli/deploy/inventories/inventory.py +9 -0
  1155. pyinfra-3.6/tests/test_cli/deploy/inventories/inventory_all.py +11 -0
  1156. pyinfra-3.6/tests/test_cli/deploy/inventories/inventory_ansible +10 -0
  1157. pyinfra-3.6/tests/test_cli/deploy/inventories/inventory_ansible.json +22 -0
  1158. pyinfra-3.6/tests/test_cli/deploy/inventories/inventory_ansible.yml +13 -0
  1159. pyinfra-3.6/tests/test_cli/deploy/tasks/a_task.py +25 -0
  1160. pyinfra-3.6/tests/test_cli/deploy/tasks/another_task.py +6 -0
  1161. pyinfra-3.6/tests/test_cli/deploy/tasks/b_task.py +7 -0
  1162. pyinfra-3.6/tests/test_cli/deploy/tasks/nested/empty_task.py +0 -0
  1163. pyinfra-3.6/tests/test_cli/deploy/templates/a_template.j2 +3 -0
  1164. pyinfra-3.6/tests/test_cli/deploy/utils.py +9 -0
  1165. pyinfra-3.6/tests/test_cli/deploy_fails/invalid_argument_type.py +3 -0
  1166. pyinfra-3.6/tests/test_cli/deploy_fails/invalid_operation_arg.py +3 -0
  1167. pyinfra-3.6/tests/test_cli/deploy_fails/operation_error.py +3 -0
  1168. pyinfra-3.6/tests/test_cli/inventories/invalid.py +13 -0
  1169. pyinfra-3.6/tests/test_cli/test_cli.py +196 -0
  1170. pyinfra-3.6/tests/test_cli/test_cli_deploy.py +120 -0
  1171. pyinfra-3.6/tests/test_cli/test_cli_exceptions.py +86 -0
  1172. pyinfra-3.6/tests/test_cli/test_cli_inventory.py +119 -0
  1173. pyinfra-3.6/tests/test_cli/test_cli_util.py +85 -0
  1174. pyinfra-3.6/tests/test_cli/user/test_ops.py +6 -0
  1175. pyinfra-3.6/tests/test_connectors/__init__.py +0 -0
  1176. pyinfra-3.6/tests/test_connectors/test_docker.py +284 -0
  1177. pyinfra-3.6/tests/test_connectors/test_ssh.py +1335 -0
  1178. pyinfra-3.6/tests/test_connectors/test_terraform.py +107 -0
  1179. pyinfra-3.6/tests/test_facts.py +130 -0
  1180. pyinfra-3.6/tests/test_global_arguments.py +55 -0
  1181. pyinfra-3.6/tests/test_operations.py +176 -0
  1182. pyinfra-3.6/tests/test_operations_utils.py +297 -0
  1183. pyinfra-3.6/tests/typing/invalid/operation_kwarg.py +5 -0
  1184. pyinfra-3.6/tests/typing/invalid/operation_kwarg_value.py +3 -0
  1185. pyinfra-3.6/tests/typing/valid/operation.py +5 -0
  1186. pyinfra-3.6/tests/util.py +482 -0
  1187. pyinfra-3.6/tests/words.txt +445 -0
  1188. pyinfra-3.6/uv.lock +1931 -0
  1189. pyinfra-3.5/CHANGELOG.md +0 -282
  1190. pyinfra-3.5/MANIFEST.in +0 -1
  1191. pyinfra-3.5/PKG-INFO +0 -194
  1192. pyinfra-3.5/README.md +0 -105
  1193. pyinfra-3.5/pyinfra/__main__.py +0 -1
  1194. pyinfra-3.5/pyinfra/api/__init__.py +0 -26
  1195. pyinfra-3.5/pyinfra/api/arguments.py +0 -406
  1196. pyinfra-3.5/pyinfra/api/exceptions.py +0 -90
  1197. pyinfra-3.5/pyinfra/api/facts.py +0 -307
  1198. pyinfra-3.5/pyinfra/api/host.py +0 -460
  1199. pyinfra-3.5/pyinfra/api/operation.py +0 -494
  1200. pyinfra-3.5/pyinfra/api/operations.py +0 -397
  1201. pyinfra-3.5/pyinfra/api/util.py +0 -454
  1202. pyinfra-3.5/pyinfra/connectors/chroot.py +0 -208
  1203. pyinfra-3.5/pyinfra/connectors/docker.py +0 -383
  1204. pyinfra-3.5/pyinfra/connectors/ssh.py +0 -671
  1205. pyinfra-3.5/pyinfra/connectors/util.py +0 -410
  1206. pyinfra-3.5/pyinfra/facts/crontab.py +0 -195
  1207. pyinfra-3.5/pyinfra/facts/files.py +0 -677
  1208. pyinfra-3.5/pyinfra/facts/freebsd.py +0 -75
  1209. pyinfra-3.5/pyinfra/facts/npm.py +0 -38
  1210. pyinfra-3.5/pyinfra/facts/selinux.py +0 -161
  1211. pyinfra-3.5/pyinfra/facts/server.py +0 -954
  1212. pyinfra-3.5/pyinfra/operations/apk.py +0 -98
  1213. pyinfra-3.5/pyinfra/operations/apt.py +0 -488
  1214. pyinfra-3.5/pyinfra/operations/brew.py +0 -231
  1215. pyinfra-3.5/pyinfra/operations/choco.py +0 -57
  1216. pyinfra-3.5/pyinfra/operations/crontab.py +0 -191
  1217. pyinfra-3.5/pyinfra/operations/dnf.py +0 -210
  1218. pyinfra-3.5/pyinfra/operations/docker.py +0 -447
  1219. pyinfra-3.5/pyinfra/operations/files.py +0 -1908
  1220. pyinfra-3.5/pyinfra/operations/flatpak.py +0 -94
  1221. pyinfra-3.5/pyinfra/operations/gem.py +0 -47
  1222. pyinfra-3.5/pyinfra/operations/git.py +0 -419
  1223. pyinfra-3.5/pyinfra/operations/iptables.py +0 -311
  1224. pyinfra-3.5/pyinfra/operations/lxd.py +0 -68
  1225. pyinfra-3.5/pyinfra/operations/mysql.py +0 -609
  1226. pyinfra-3.5/pyinfra/operations/opkg.py +0 -88
  1227. pyinfra-3.5/pyinfra/operations/pacman.py +0 -81
  1228. pyinfra-3.5/pyinfra/operations/pip.py +0 -205
  1229. pyinfra-3.5/pyinfra/operations/pipx.py +0 -102
  1230. pyinfra-3.5/pyinfra/operations/pkg.py +0 -70
  1231. pyinfra-3.5/pyinfra/operations/pkgin.py +0 -91
  1232. pyinfra-3.5/pyinfra/operations/postgres.py +0 -436
  1233. pyinfra-3.5/pyinfra/operations/puppet.py +0 -40
  1234. pyinfra-3.5/pyinfra/operations/python.py +0 -72
  1235. pyinfra-3.5/pyinfra/operations/selinux.py +0 -189
  1236. pyinfra-3.5/pyinfra/operations/server.py +0 -1099
  1237. pyinfra-3.5/pyinfra/operations/snap.py +0 -117
  1238. pyinfra-3.5/pyinfra/operations/ssh.py +0 -216
  1239. pyinfra-3.5/pyinfra/operations/systemd.py +0 -149
  1240. pyinfra-3.5/pyinfra/operations/sysvinit.py +0 -141
  1241. pyinfra-3.5/pyinfra/operations/util/docker.py +0 -251
  1242. pyinfra-3.5/pyinfra/operations/util/files.py +0 -243
  1243. pyinfra-3.5/pyinfra/operations/util/packaging.py +0 -323
  1244. pyinfra-3.5/pyinfra/operations/xbps.py +0 -77
  1245. pyinfra-3.5/pyinfra/operations/yum.py +0 -210
  1246. pyinfra-3.5/pyinfra/operations/zfs.py +0 -175
  1247. pyinfra-3.5/pyinfra/operations/zypper.py +0 -192
  1248. pyinfra-3.5/pyinfra.egg-info/PKG-INFO +0 -194
  1249. pyinfra-3.5/pyinfra.egg-info/SOURCES.txt +0 -201
  1250. pyinfra-3.5/pyinfra.egg-info/dependency_links.txt +0 -1
  1251. pyinfra-3.5/pyinfra.egg-info/entry_points.txt +0 -12
  1252. pyinfra-3.5/pyinfra.egg-info/requires.txt +0 -69
  1253. pyinfra-3.5/pyinfra.egg-info/top_level.txt +0 -3
  1254. pyinfra-3.5/pyinfra_cli/__main__.py +0 -43
  1255. pyinfra-3.5/pyinfra_cli/main.py +0 -781
  1256. pyinfra-3.5/pyinfra_cli/util.py +0 -233
  1257. pyinfra-3.5/pyproject.toml +0 -38
  1258. pyinfra-3.5/setup.cfg +0 -37
  1259. pyinfra-3.5/setup.py +0 -158
  1260. pyinfra-3.5/tests/test_api/test_api_deploys.py +0 -124
  1261. pyinfra-3.5/tests/test_api/test_api_facts.py +0 -329
  1262. pyinfra-3.5/tests/test_api/test_api_operations.py +0 -927
  1263. pyinfra-3.5/tests/test_cli/test_cli.py +0 -195
  1264. pyinfra-3.5/tests/test_cli/test_cli_deploy.py +0 -120
  1265. pyinfra-3.5/tests/test_cli/test_cli_exceptions.py +0 -86
  1266. pyinfra-3.5/tests/test_cli/test_cli_inventory.py +0 -119
  1267. pyinfra-3.5/tests/test_cli/test_cli_util.py +0 -85
  1268. pyinfra-3.5/tests/test_connectors/test_docker.py +0 -234
  1269. pyinfra-3.5/tests/test_connectors/test_ssh.py +0 -1249
  1270. pyinfra-3.5/tests/test_connectors/test_terraform.py +0 -108
  1271. pyinfra-3.5/tests/test_facts.py +0 -123
  1272. pyinfra-3.5/tests/test_global_arguments.py +0 -55
  1273. pyinfra-3.5/tests/test_operations.py +0 -171
  1274. pyinfra-3.5/tests/test_operations_utils.py +0 -17
  1275. {pyinfra-3.5 → pyinfra-3.6}/LICENSE.md +0 -0
  1276. {pyinfra-3.5/pyinfra/connectors → pyinfra-3.6/docs}/__init__.py +0 -0
  1277. {pyinfra-3.5/tests/test_api → pyinfra-3.6/scripts}/__init__.py +0 -0
  1278. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/__init__.py +0 -0
  1279. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/api/arguments_typed.py +0 -0
  1280. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/api/command.py +0 -0
  1281. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/api/config.py +0 -0
  1282. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/api/connect.py +0 -0
  1283. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/api/connectors.py +0 -0
  1284. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/api/deploy.py +0 -0
  1285. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/api/inventory.py +0 -0
  1286. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/api/state.py +0 -0
  1287. {pyinfra-3.5/tests/test_cli → pyinfra-3.6/src/pyinfra/connectors}/__init__.py +0 -0
  1288. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/connectors/base.py +0 -0
  1289. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/connectors/dockerssh.py +0 -0
  1290. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/connectors/local.py +0 -0
  1291. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/connectors/scp/__init__.py +0 -0
  1292. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/connectors/scp/client.py +0 -0
  1293. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/connectors/ssh_util.py +0 -0
  1294. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/connectors/sshuserclient/__init__.py +0 -0
  1295. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/connectors/sshuserclient/client.py +0 -0
  1296. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/connectors/sshuserclient/config.py +0 -0
  1297. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/connectors/terraform.py +0 -0
  1298. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/connectors/vagrant.py +0 -0
  1299. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/context.py +0 -0
  1300. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/__init__.py +0 -0
  1301. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/apk.py +0 -0
  1302. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/apt.py +0 -0
  1303. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/brew.py +0 -0
  1304. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/bsdinit.py +0 -0
  1305. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/cargo.py +0 -0
  1306. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/choco.py +0 -0
  1307. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/deb.py +0 -0
  1308. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/dnf.py +0 -0
  1309. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/docker.py +0 -0
  1310. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/efibootmgr.py +0 -0
  1311. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/flatpak.py +0 -0
  1312. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/gem.py +0 -0
  1313. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/git.py +0 -0
  1314. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/gpg.py +0 -0
  1315. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/hardware.py +0 -0
  1316. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/iptables.py +0 -0
  1317. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/launchd.py +0 -0
  1318. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/lxd.py +0 -0
  1319. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/mysql.py +0 -0
  1320. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/openrc.py +0 -0
  1321. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/opkg.py +0 -0
  1322. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/pacman.py +0 -0
  1323. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/pip.py +0 -0
  1324. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/pipx.py +0 -0
  1325. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/pkg.py +0 -0
  1326. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/pkgin.py +0 -0
  1327. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/podman.py +0 -0
  1328. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/postgres.py +0 -0
  1329. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/postgresql.py +0 -0
  1330. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/rpm.py +0 -0
  1331. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/runit.py +0 -0
  1332. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/snap.py +0 -0
  1333. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/systemd.py +0 -0
  1334. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/sysvinit.py +0 -0
  1335. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/upstart.py +0 -0
  1336. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/util/__init__.py +0 -0
  1337. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/util/databases.py +0 -0
  1338. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/util/packaging.py +0 -0
  1339. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/util/units.py +0 -0
  1340. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/util/win_files.py +0 -0
  1341. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/vzctl.py +0 -0
  1342. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/xbps.py +0 -0
  1343. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/yum.py +0 -0
  1344. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/zfs.py +0 -0
  1345. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/facts/zypper.py +0 -0
  1346. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/local.py +0 -0
  1347. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/__init__.py +0 -0
  1348. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/bsdinit.py +0 -0
  1349. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/cargo.py +0 -0
  1350. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/freebsd/__init__.py +0 -0
  1351. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/freebsd/freebsd_update.py +0 -0
  1352. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/freebsd/pkg.py +0 -0
  1353. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/freebsd/service.py +0 -0
  1354. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/freebsd/sysrc.py +0 -0
  1355. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/launchd.py +0 -0
  1356. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/npm.py +0 -0
  1357. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/openrc.py +0 -0
  1358. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/postgresql.py +0 -0
  1359. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/runit.py +0 -0
  1360. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/upstart.py +0 -0
  1361. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/util/__init__.py +0 -0
  1362. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/util/service.py +0 -0
  1363. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/operations/vzctl.py +0 -0
  1364. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/progress.py +0 -0
  1365. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/py.typed +0 -0
  1366. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra/version.py +0 -0
  1367. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra_cli/__init__.py +0 -0
  1368. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra_cli/commands.py +0 -0
  1369. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra_cli/exceptions.py +0 -0
  1370. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra_cli/inventory.py +0 -0
  1371. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra_cli/log.py +0 -0
  1372. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra_cli/prints.py +0 -0
  1373. {pyinfra-3.5 → pyinfra-3.6/src}/pyinfra_cli/virtualenv.py +0 -0
  1374. {pyinfra-3.5/tests/test_connectors → pyinfra-3.6/tests/test_api}/__init__.py +0 -0
  1375. {pyinfra-3.5 → pyinfra-3.6}/tests/test_api/test_api.py +0 -0
  1376. {pyinfra-3.5 → pyinfra-3.6}/tests/test_api/test_api_arguments.py +0 -0
  1377. {pyinfra-3.5 → pyinfra-3.6}/tests/test_api/test_api_command.py +0 -0
  1378. {pyinfra-3.5 → pyinfra-3.6}/tests/test_api/test_api_config.py +0 -0
  1379. {pyinfra-3.5 → pyinfra-3.6}/tests/test_api/test_api_host.py +0 -0
  1380. {pyinfra-3.5 → pyinfra-3.6}/tests/test_api/test_api_inventory.py +0 -0
  1381. {pyinfra-3.5 → pyinfra-3.6}/tests/test_api/test_api_util.py +0 -0
  1382. {pyinfra-3.5 → pyinfra-3.6}/tests/test_cli/test_context_objects.py +0 -0
  1383. {pyinfra-3.5 → pyinfra-3.6}/tests/test_cli/util.py +0 -0
  1384. {pyinfra-3.5 → pyinfra-3.6}/tests/test_connectors/test_chroot.py +0 -0
  1385. {pyinfra-3.5 → pyinfra-3.6}/tests/test_connectors/test_dockerssh.py +0 -0
  1386. {pyinfra-3.5 → pyinfra-3.6}/tests/test_connectors/test_local.py +0 -0
  1387. {pyinfra-3.5 → pyinfra-3.6}/tests/test_connectors/test_sshuserclient.py +0 -0
  1388. {pyinfra-3.5 → pyinfra-3.6}/tests/test_connectors/test_util.py +0 -0
  1389. {pyinfra-3.5 → pyinfra-3.6}/tests/test_connectors/test_vagrant.py +0 -0
  1390. {pyinfra-3.5 → pyinfra-3.6}/tests/test_units.py +0 -0
@@ -0,0 +1,3 @@
1
+ [*.json]
2
+ indent_style = space
3
+ indent_size = 4
@@ -0,0 +1,5 @@
1
+ # Run black & isort on everything
2
+ 2d4792eba3233c77a298d86e9638434688e3a1c5
3
+
4
+ # 2025-09-25 Run ruff on everything
5
+ b1dc723d92d8804b559956c97ca720c3837053c9
@@ -0,0 +1 @@
1
+ github: fizzadar
@@ -0,0 +1,26 @@
1
+ ---
2
+
3
+ name: 🐛 Bug Report
4
+ about: Create a report to help us improve pyinfra.
5
+ labels: Bug
6
+
7
+ ---
8
+
9
+ ## Describe the bug
10
+ A clear and concise description of what the bug is.
11
+
12
+ ## To Reproduce
13
+ Steps to reproduce the behavior, please include where possible:
14
+
15
+ + Operation code & usage
16
+ + Target system information
17
+ + Example using the `@docker` connector (helps isolate the problem)
18
+
19
+ ## Expected behavior
20
+ A clear and concise description of what you expected to happen.
21
+
22
+ ## Meta
23
+ + Include output of `pyinfra --support`.
24
+ + How was pyinfra installed (source/pip)?
25
+ + Include pyinfra-debug.log (if one was created)
26
+ + Consider including output with `-vv` and `--debug`.
@@ -0,0 +1,10 @@
1
+ blank_issues_enabled: true
2
+
3
+ contact_links:
4
+ - name: 📖 Documentation
5
+ url: https://docs.pyinfra.com
6
+ about: View the pyinfra documentation.
7
+
8
+ - name: 💬 Help & Support
9
+ url: https://docs.pyinfra.com/page/support.html
10
+ about: Please ask and answer usage questions here.
@@ -0,0 +1,12 @@
1
+ ---
2
+
3
+ name: 💡 Feature Request
4
+ about: Suggest an idea for this project.
5
+
6
+ ---
7
+
8
+ ## Is your feature request related to a problem? Please describe
9
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
10
+
11
+ ## Describe the solution you'd like
12
+ A clear and concise description of what you want to happen.
@@ -0,0 +1,15 @@
1
+ <!--
2
+ 🎉 Thank you for taking the time to contribute to pyinfra! 🎉
3
+
4
+ Please provide a short description of the proposed change and here's a handy checklist of things
5
+ to make PRs quicker to review and merge.
6
+
7
+ Note that we will not merge new connectors, but instead welcome PRs that link to thid party
8
+ connector packages.
9
+ -->
10
+
11
+ - [ ] Pull request is based on the default branch (`3.x` at this time)
12
+ - [ ] Pull request includes tests for any new/updated operations/facts
13
+ - [ ] Pull request includes documentation for any new/updated operations/facts
14
+ - [ ] Tests pass (see `scripts/dev-test.sh`)
15
+ - [ ] Type checking & code style passes (see `scripts/dev-lint.sh`)
@@ -0,0 +1,56 @@
1
+ name: Generate & Deploy Docs
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ branches:
7
+ - 3.x
8
+ - 2.x
9
+ - 1.x
10
+ - 0.x
11
+
12
+ jobs:
13
+ deploy:
14
+ runs-on: ubuntu-24.04
15
+ if: github.repository == 'pyinfra-dev/pyinfra'
16
+ steps:
17
+ - name: Clone Source Repository
18
+ uses: actions/checkout@v5
19
+
20
+ - name: Fetch git tags
21
+ run: git fetch --tags origin
22
+
23
+ - name: Clone Generated Repository
24
+ uses: actions/checkout@v5
25
+ with:
26
+ token: ${{ secrets.ACCESS_TOKEN }}
27
+ repository: pyinfra-dev/docs.pyinfra.com
28
+ path: docs/public/
29
+
30
+ - name: Set up Python
31
+ uses: actions/setup-python@v5
32
+ with:
33
+ python-version: "3.13"
34
+ - name: Install uv
35
+ uses: astral-sh/setup-uv@v6
36
+ - name: Install
37
+ run: |
38
+ uv sync --group docs --no-default-groups
39
+ uv pip install 'jinja2<3.1'
40
+
41
+ - name: Generate documentation
42
+ run: scripts/build-public-docs.sh
43
+ env:
44
+ PYTHONPATH: '.'
45
+
46
+ - name: Push & Update
47
+ run: |
48
+ cd docs/public/
49
+
50
+ if [[ `git status --porcelain` ]]; then
51
+ git config user.name github-actions
52
+ git config user.email github-actions@github.com
53
+ git add .
54
+ git commit -m "Docs build $(date -I)"
55
+ git push origin HEAD:main
56
+ fi
@@ -0,0 +1,124 @@
1
+ name: Lint & Test
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - 3.x
7
+ - 2.x
8
+ - 1.x
9
+ - 0.x
10
+ pull_request:
11
+
12
+ jobs:
13
+ # Linting
14
+ #
15
+
16
+ lint:
17
+ runs-on: ubuntu-24.04
18
+ steps:
19
+ - uses: actions/checkout@v5
20
+ - uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.13"
23
+ - name: Install uv
24
+ uses: astral-sh/setup-uv@v6
25
+ - uses: astral-sh/ruff-action@v3
26
+ - uses: astral-sh/ruff-action@v3
27
+ with:
28
+ args: "format --check"
29
+
30
+ type-check:
31
+ runs-on: ubuntu-24.04
32
+ steps:
33
+ - uses: actions/checkout@v5
34
+ - uses: actions/setup-python@v5
35
+ with:
36
+ python-version: "3.13"
37
+ - name: Install uv
38
+ uses: astral-sh/setup-uv@v6
39
+ - run: uv sync --group test --no-default-groups
40
+ - run: uv run mypy
41
+
42
+ spell-check:
43
+ runs-on: ubuntu-24.04
44
+ steps:
45
+ - uses: actions/checkout@v5
46
+ - name: Check spelling
47
+ uses: crate-ci/typos@v1.30.3
48
+
49
+ unit-test:
50
+ needs:
51
+ - lint
52
+ - type-check
53
+ - spell-check
54
+ strategy:
55
+ matrix:
56
+ os: [macos-26, macos-15, macos-14, windows-2025, windows-2022, ubuntu-24.04, ubuntu-22.04]
57
+ # Test every OS vs. Python 3.13, and only one for 3.1[012]
58
+ python-version: ["3.13"]
59
+ include:
60
+ - os: ubuntu-24.04
61
+ python-version: "3.12"
62
+ - os: ubuntu-24.04
63
+ python-version: "3.11"
64
+ - os: ubuntu-24.04
65
+ python-version: "3.10"
66
+ runs-on: ${{ matrix.os }}
67
+ steps:
68
+ - uses: actions/checkout@v5
69
+ - uses: actions/setup-python@v5
70
+ with:
71
+ python-version: ${{ matrix.python-version }}
72
+ - name: Install uv
73
+ uses: astral-sh/setup-uv@v6
74
+ - run: uv sync --group test --no-default-groups --python=${{ matrix.python-version }}
75
+ - run: uv run pytest --cov --disable-warnings
76
+ - name: Upload coverage report to codecov
77
+ if: ${{ matrix.os == 'ubuntu-24.04' && matrix.python-version == '3.13' }}
78
+ uses: codecov/codecov-action@v5
79
+
80
+ # End-to-end tests
81
+ #
82
+
83
+ end-to-end-test:
84
+ needs:
85
+ - lint
86
+ - type-check
87
+ - spell-check
88
+ strategy:
89
+ matrix:
90
+ os: [ubuntu-22.04, ubuntu-24.04]
91
+ test-name: [local, ssh, docker, podman]
92
+ include:
93
+ - os: macos-14
94
+ test-name: local
95
+ - os: macos-15
96
+ test-name: local
97
+ - os: macos-26
98
+ test-name: local
99
+ runs-on: ${{ matrix.os }}
100
+ steps:
101
+ - uses: actions/checkout@v5
102
+ - uses: actions/setup-python@v5
103
+ with:
104
+ python-version: "3.13"
105
+ - name: Install uv
106
+ uses: astral-sh/setup-uv@v6
107
+ - run: uv sync --group test --no-default-groups --python=${{ matrix.python-version }}
108
+ - run: uv run pytest -m end_to_end_${{ matrix.test-name }}
109
+
110
+ # Finally, single jon to check if all completed, for use in protected branch
111
+
112
+ tests-done:
113
+ if: ${{ always() }}
114
+ needs:
115
+ - lint
116
+ - type-check
117
+ - spell-check
118
+ - unit-test
119
+ - end-to-end-test
120
+ runs-on: ubuntu-latest
121
+ steps:
122
+ - uses: matrix-org/done-action@v3
123
+ with:
124
+ needs: ${{ toJSON(needs) }}
pyinfra-3.6/.gitignore ADDED
@@ -0,0 +1,36 @@
1
+ .DS_Store
2
+ .ropeproject
3
+
4
+ *.pyc
5
+ *.egg-info
6
+
7
+ .*sw[pno]
8
+
9
+ build/
10
+ dist/
11
+
12
+ venv/
13
+ .venv/
14
+ .cache/
15
+ .mypy_cache/
16
+ .pytest_cache/
17
+ .python-version
18
+
19
+ .vagrant*
20
+
21
+ .coverage
22
+
23
+ .docstmp
24
+ docs/build/
25
+ docs/public/
26
+ docs/connectors/
27
+ docs/facts/
28
+ docs/operations/
29
+ docs/apidoc/
30
+ docs/_deploy_globals.rst
31
+
32
+ .idea/
33
+ .vscode/
34
+
35
+ pyinfra-debug.log
36
+ Makefile
@@ -0,0 +1,21 @@
1
+ [files]
2
+ extend-exclude = [
3
+ "tests/facts/apt.SimulateOperationWillChange/upgrade.json",
4
+ "tests/facts/opkg.OpkgPackages/opkg_packages.json",
5
+ "tests/words.txt",
6
+ ]
7
+
8
+ [default]
9
+ extend-ignore-re = [
10
+ "shell\\('uptim'\\)",
11
+ '"fpr:::::::::',
12
+ '== "fpr":',
13
+ "00740ba1",
14
+ "forr something in",
15
+ "unknown tag 'forr'",
16
+ "nd6 options=",
17
+ "4Ue1", # Ignore false positive in test_sshuserclient.py (EXAMPLE_KEY_1)
18
+ ]
19
+
20
+ [default.extend-words]
21
+ datas = "datas"
@@ -0,0 +1,364 @@
1
+ # v3.6
2
+
3
+ First 2026 release - Happy New Year all! Thank you to all contributors. One big highlight is new metadata spec for plugins, this is the start of better discovery and documentation generation for third party facts and operations:
4
+
5
+ - add metadata spec for pyinfra plugins (@rod7760)
6
+
7
+ New and updated operations/facts:
8
+
9
+ - operations: add `_temp_dir` global argument for configuring temp directory (@wowi42)
10
+ - operations: add `files.copy` operation (@EricDriussi)
11
+ - operations.crontab: fix modification not properly relying on the `cron_name` parameter (@information-redacted)
12
+ - operations.docker.container: add support for setting labels (@spookyvision)
13
+ - operations: add import statements on at least one example of every operation (@mkinney)
14
+ - operations.docker.image: make operation idempotent (@DonDebonair)
15
+ - operations.files.template: allow custom jinja2 template loaders (@DaRasch)
16
+ - operations.files.block/connectors.util: use correct temporary directory (@morrison12)
17
+ - operations.util.packaging: allow empty package list in `ensure_packages` (@schenker)
18
+ - operations: fix tmpdir to properly use all the POSIX environment variables (@wowi42)
19
+ - facts.files.FileContents: improve docstring (@adonm)
20
+ - facts.apt.update: fix computation of cache_time when host is not UTC (@philippemilink)
21
+ - facts: add `FactProcessError` to log, not explode, issues processing facts (@NichtJens)
22
+ - facts.npm: check directory exists before cd-ing (wowi42)
23
+
24
+ Connectors:
25
+
26
+ - connectors.docker: add platform and architecture option via connector data (@JP-Ellis)
27
+ - connectors: close stdin after writing any input
28
+ - connectors.ssh: add workaround for paramiko no session error (@dfaerch)
29
+
30
+ CLI:
31
+
32
+ - cli: change color of "No changes" to cyan
33
+ - cli: add option `--same-sudo-password` (@philippemilink)
34
+
35
+ Docs/meta:
36
+
37
+ - docs: replace `python -m` with `uv run -m` (@JP-Ellis)
38
+ - docs: fix URLs in API documentation (@kelno)
39
+ - docs/connectors: document command wrapping and parameter filtering best practices (@elazar)
40
+ - tests: freeze date for fact tests
41
+
42
+ # v3.5.3
43
+
44
+ - another release to fix different doc generation issues 🫠
45
+
46
+ # v3.5.2
47
+
48
+ - fix operation & fact docs generation
49
+
50
+ # v3.5.1
51
+
52
+ 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):
53
+
54
+ - feat: use ruff for linting and formatting (@DonDebonair)
55
+ - feat: use uv for project and dependency management (@DonDebonair)
56
+
57
+ Core fixes:
58
+
59
+ - api: correctly set context state+host when calling `get_facts`
60
+ - cli: catch exceptions when testing inventory/operation imports
61
+ - cli: fix/remove datetime timezone warnings (@wowi42)
62
+ - operations/files.block: correct behaviour when markers/block not found and no line provided (@morrison12)
63
+ - operations.util.packaging: extend PkgInfo for winget (@rod7760)
64
+ - facts/server: support negative value in sysctl (@imlonghao)
65
+
66
+ Docs:
67
+
68
+ - docs: fix dynamic execution example (@wowi42)
69
+ - docs: Specify how the recursive argument to directory() works (@cliffmccarthy)
70
+ - docs: change recommended installation methods (@DonDebonair)
71
+ - docs: update writing connectors
72
+
73
+ Tests:
74
+
75
+ - op.server.user tests: add exists_noop.json for user existence checks (fix warning) (@maisim)
76
+ - op.server.user tests: add noop_description (fix warning) (@maisim)
77
+ - fix: add missing command field in test (@maisim)
78
+ - tests: clear the host sftp memoization cache before setting up the mock (@wowi42)
79
+ - tests: export testgen class to a new package/repo
80
+ - tests: fix missing stage sets on state
81
+
82
+ # v3.5
83
+
84
+ New release with some really awesome new features, brought to you by the fantastic contributions of the community. New stuff:
85
+
86
+ - add `--diff` argument to show file diffs for potential file changes (@jgelens)
87
+ - add `_retries`, `_retry_delay` and `_retry_until` global arguments (@shohamd4)
88
+ - parallelize disconnecting from hosts (@gwelch-contegix)
89
+ - enable using SCP instead of SFTP for SSH file transfers (@DonDebonair)
90
+
91
+ New and updated operations/facts:
92
+
93
+ - facts/server: add `RebootRequired` fact (@wowi42)
94
+ - operations/pip: support PEP-508 package versions (@morrison12)
95
+ - operations+facts/docker: add Docker plugin support (@DonDebonair)
96
+ - operations/files.put: add `atime` and `mtime` arguments (@vram0gh2)
97
+ - operations/openrc: support runlevel when enabling services (@sengo4hd)
98
+ - facts/yum+dnf+zypper: return `repoid` in repository facts
99
+
100
+ Operation/fact fixes:
101
+
102
+ - facts/files.File: add ls fallback support (@mrkbac)
103
+ - operations/openrc: add missing noop messages (@sengo4hd)
104
+ - operations/server.crontab: fix newline when replacing existing values (@Nananas)
105
+ - operations/files.block: fix examples doc (@morrison12)
106
+ - operations/files.block: fix case where file exists but line is missing (@morrison12)
107
+ - operations/files.block: improve handling of special characters in marker lines (@morrison12)
108
+
109
+ Internal/meta:
110
+
111
+ - documentation link fix (@sengo4hd)
112
+
113
+ # v3.4.1
114
+
115
+ - fix config context when getting operation arguments
116
+
117
+ # v3.4
118
+
119
+ Much delayed 3.4, great collection of additions and improvements. Huge THANK YOU to all contributors as always. New features:
120
+
121
+ - Add @podman connector (@Griffoen)
122
+
123
+ New and updated operations/facts:
124
+
125
+ - operations/docker.network: add support for aux addresses (@DonDebonair)
126
+ - operations/files: try multiple hash functions in `files.get` + `files.put` (@mrkbac)
127
+ - operations/files.download: add `temp_dir` argument (@scy)
128
+ - operations/files.download: add `extra_curl_args` and `extra_wget_args` arguments (@jgelens)
129
+ - operations/flatpak: add remote support (@Griffoen)
130
+ - operations/git + facts/git: add `GitTag` fact and support tag checkout (@wowi42)
131
+ - operations/server.mount: add support for FreeBSD mounts (@DtxdF)
132
+ - facts/server: add `server.Port` fact to find process listening on port (@missytake)
133
+
134
+ Operation/fact fixes:
135
+
136
+ - operations/docker: handle case where no docker containers/etc exist (@wowi42)
137
+ - operations/files + operations/crontab: fix deletion of lines when `present=False` (@bad)
138
+ - operations/files.block: avoid use of non-POSIX `chown -n`
139
+ - operations/files.put: fix copying of local file mode (@vram0gh2)
140
+ - operations/server.user: fix appending of user groups (@aaron-riact)
141
+ - facts/server.Mounts: fix whitespace and escaped character parsing (@lemmi)
142
+ - facts/systemd: treat mounted units as active
143
+
144
+ Internal/meta:
145
+
146
+ - remove unnecessary setuptools runtime dependency (@karlicoss)
147
+
148
+ # v3.3.1
149
+
150
+ - connectors/ssh: fix extra `keep_alive` key passing through to paramiko `connect` call (@chipot)
151
+ - docs: refine installation guide with updated Python requirements and best practices (@wowi42)
152
+
153
+ # v3.3
154
+
155
+ 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:
156
+
157
+ New operations & arguments:
158
+
159
+ - operations/freebsd: add FreeBSD operations & facts (@DtxdF)
160
+ - operations/files.move: new operation (@Pirols)
161
+ - operations/server.user: enable adding user to secondary groups (Pirols)
162
+ - operations/postgres: enhance role management by adding `ALTER ROLE` support (@wowi42)
163
+ - operations/postgres: enable modifying existing postgres databases (@wowi42)
164
+ - operations/docker.container: refactor to support container recreation (@minor-fixes)
165
+
166
+ Operation/fact fixes:
167
+
168
+ - operations/postgres: fix quoting of locale parameters (@xvello)
169
+ - operations/server: remove leftover deprecated parameter (@wowi42)
170
+ - operations/pacmen: update PACMAN_REGEX to support additional characters (@wowi42)
171
+ - operations/server.sysctl: handle 0 integer values correctly (@lemmi)
172
+ - operations/apt: dist-upgrade also supports --autoremove (@bauen1)
173
+ - operations/apt: fix parameter name in docs (@bauen1)
174
+ - operations/server: fix: lastlog is always null (@ingstem)
175
+ - operations/docker: Fixed a typo with the volumes parameter to docker.prune operation (@mpilone)
176
+ - facts/xbps.XbpsPackages: allow . in package names (@lemmi)
177
+
178
+ Connectors, CLI:
179
+
180
+ - connectors: improve detection of sudo password needed
181
+ - connectors/ssh: add support for `ServerAliveInterval` (@chipot)
182
+ - cli: enable -h as shorthand for --help (@NichtJens)
183
+
184
+ Docs:
185
+
186
+ - docs: Add a section explaining connector flow (@goetzk)
187
+ - docs: Add inventory processing note and reference it (@goetzk)
188
+ - docs: Add example of logging to using operations docs (@goetzk)
189
+ - docs: fix wrong example operation using forbidden argument 'name' (@robertmx)
190
+ - docs: Add a note to the docs about using `_inner` when calling operations from other operations (@CSDUMMI)
191
+ - docs: Document host, state, inventory in files.template (@mpilone)
192
+ - docs: Minor adjustments to wording help docs and help (@goetzk)
193
+ - docs: expand connectors documentation (@goetzk)
194
+ - docs: correct import path for any_changed, all_changed (@lemmi)
195
+ - docs: Add note re: global arguments to operations (@simonhammes)
196
+
197
+ Internal/meta:
198
+
199
+ - refactor: update opkg documentation and add requires_command to ZFS and Git tests (@wowi42)
200
+ - Update testing and development dependencies in setup.py (@wowi42)
201
+ - tests: Load test specs with PyYAML instead of json (@taliaferro)
202
+ - typing: Require explicit override decorator (@bauen1)
203
+ - api: don't execute callbacks within a greenlet if we're already in one
204
+ - ci: Github Actions support for python 3.12 (@wowi42)
205
+ - ci: Prevent docs job from running on forks (@simonhammes)
206
+
207
+ # v3.2
208
+
209
+ Hello 2025! Here's pyinfra 3.2 - with another incredible round of contributions from the community, THANK YOU ALL. New stuff:
210
+
211
+ - Add total counts to results summary (@NichtJens)
212
+ - Enable passing extra data via `local.include` (@TimothyWillard)
213
+ - Validate inventory files and display warnings for unexpected variables (@simonhammes)
214
+
215
+ New operations/facts:
216
+
217
+ - Add `pipx` operations (`packages`, `upgrade_all`, `ensure_path`) facts (`PipxPackages`, `PipxEnvironment`) and operations (@maisim)
218
+ - Add `server.OsRelease` fact (@wowi42)
219
+ - Add `podman.PodmanSystemInfo` and `podman.PodmanPs` facts (@bauen1)
220
+ - Add many extra arguments (including generic args) to `files.FindFiles*` facts (@JakkuSakura)
221
+ - Add `system` argument to `git.config` operation (@Pirols)
222
+ - Add `psql_database` argument to postgres operations & facts (@hamishfagg)
223
+ - Add `files.Sha384File` fact and `sha384sum` argument to `files.download` operation (@simonhammes)
224
+ - Add `apt.SimulateOperationWillChange` fact (@bauen1)
225
+ - Detect changes in `apt.upgrade` and `apt.dist_upgrade` operations (@bauen1)
226
+ - Add `fibootmgr.EFIBootMgr` fact (@bauen1)
227
+ - Add opkg facts and operations (@morrison12)
228
+
229
+ Fixes:
230
+
231
+ - Multiple fixes for `server.crontab` operation and facts (@JakkuSakura)
232
+ - Correctly handle `latest` argument with requirements file in `pip.packages` operation (@amiraliakbari)
233
+ - Fix regex used to parse installed apk packages (@simonhammes)
234
+ - Fix SSH connector overwriting known hosts files (@vo452)
235
+
236
+ Docs/internal tweaks:
237
+
238
+ - Add type annotations for many more operations (@simonhammes)
239
+ - Add typos CI checking to replace flake8-spellcheck (@simonhammes)
240
+ - Bump CI actions and dependencies (@simonhammes)
241
+ - Require JSON tests to include all arguments
242
+ - Remove unused `configparser` dependency (@bkmgit)
243
+ - Many small documentation fixes/tweaks
244
+
245
+ # v3.1.1
246
+
247
+ - Improve errors with 2.x style `@decorator` (vs `@decorator()`) functions
248
+ - Document adding custom connectors (@simonhammes)
249
+ - Add basic API example to docs (@pirate)
250
+ - Fix sphinx warnings (@simonhammes)
251
+ - Fix force & pull arguments in `git.worktree` operation
252
+ - Fix `server.reboot` reconnection (@wackou)
253
+ - Fix chroot/local connector non-utf file gets (@evoldstad)
254
+ - Fix `AptSources` fact to parse components in order & with digits (@rsfzi)
255
+
256
+ # v3.1
257
+
258
+ 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:
259
+
260
+ - Add `zfs` operations (`dataset`, `snapshot`, `volume`, `filesystem`) facts (`Pools`, `Datasets`, `Filesystems`, `Snapshots`, `Volumes`) (@taliaferro)
261
+ - Add `flatpak` operations (`packages`) and facts (`FlatpakPackage`, `FlatpakPackages`) (@JustScreaMy)
262
+ - Add `jinja_env_kwargs` argument to `files.template` operation (@DonDebonair)
263
+ - Add using dictionaries as `@terraform` output (map from group -> hosts)
264
+ - Add default `@terraform` output key - `pyinfra_inventory.value`, promote connector to beta
265
+ - Add support for multiple keys in each `server.authorized_keys` file (@matthijskooijman)
266
+ - Add print all dependency versions with `--support` flag (@kytta)
267
+
268
+ Fixes:
269
+
270
+ - Fix when `ssh_hostname` is set as override data, don't do inventory hostname check
271
+ - Fix `apt.AptSources` parsing special characters (@CondensedTea)
272
+ - Fix `server.reboot` connection detection (@bauen1 + @lemmi)
273
+ - Fix systemd flagging of sockets running (@bauen1)
274
+ - Fix mysql dump quoting (@simonhammes)
275
+ - Fix tilde expansion in files facts (@simonhammes)
276
+ - Fix host lookup check with SSH alias config (@simonhammes)
277
+ - Fix crontab comparison (@andrew-d)
278
+
279
+ Docs/internal tweaks:
280
+
281
+ - Improve operations documentation (@bauen1)
282
+ - Default to local machine if `user_name` set in systecmt (@bauen1)
283
+ - Improve efficiency of Docker operations (@apecnascimento)
284
+ - Shallow copy `host.data` data to mutation
285
+
286
+ # v3.0.2
287
+
288
+ - Fix `OperationMeta.did_change`: this is now a function as originally designed
289
+ - Add quick test for `host.when` context manager
290
+ - Remove extra detected changes note when not relevant
291
+
292
+ # v3.0.1
293
+
294
+ - Switch to `command -v` not `which` in `server.Which` fact (@lemmi)
295
+ - Fix detection of xbps in `server.packages` operation (@romain-dartigues)
296
+ - Fix argument typo in operations doc (@scoufman)
297
+ - Add expanded note about detected changes + hidden side effects during execution
298
+ - Fix missing global arguments in group data files
299
+ - Fix `--group-data` CLI argument behaviour
300
+ - Remove unused/dead `--quiet` flag
301
+
302
+ # v3.0
303
+
304
+ Welcome to pyinfra v3! This version is the biggest overhaul of pyinfra since it was created back in 2015. Most v2 deployment code should be automatically compatible, but as always be aware. Major changes:
305
+
306
+ ### Runtime operation execution
307
+
308
+ pyinfra now executes operations at runtime, rather than pre-generating commands. Although the change isn't noticeable this fixes an entire class of bugs and confusion. See the [limitations](https://docs.pyinfra.com/en/2.x/deploy-process.html#limitations) section in the v2 docs. All of those issues are now a thing of the past.
309
+
310
+ This represents a huge overhaul of pyinfra's internals and should be a huge improvement for users.
311
+
312
+ Care has been taken to reduce the overhead of this change which still supports the same diffs and change proposal mechanism.
313
+
314
+ ### CLI flow & prompts
315
+
316
+ The pyinfra CLI will now prompt (instead of ignore, or immediately exit) when problems are encountered, allowing the user to choose to continue. Additionally an approval step is added before executing changes (this can be skipped with `-y` or setting the `PYINFRA_YES` environment variable).
317
+
318
+ ### Extendable connectors API, typing overhaul
319
+
320
+ v3 of pyinfra includes for the first time a (mostly) typed internal API with proper support for IDE linting. There's a whole new connectors API that provides a framework for building new connectors.
321
+
322
+ ### Breaking changes
323
+
324
+ - Rename `_use_sudo_password` argument to `_sudo_password`
325
+ - Remove `winrm` connector and `windows*` operations/facts, moving to [`pyinfra-windows`](https://github.com/pyinfra-dev/pyinfra-windows)
326
+ - The deploy decorator must now be called, ie used as `@deploy()`, and is now typed
327
+ - Remove broken Ansible inventory connector
328
+
329
+ ### Operations & Facts
330
+
331
+ - Add `docker.container`, `docker.image`, `docker.volume`, `docker.network` & `docker.prune` operations (@apecnascimento)
332
+ - Add `runit.service` operation and `RunitStatus` fact (@lemmi)
333
+ - Add `TmpDir` fact
334
+ - Add `services` argument to systemd facts for filtering
335
+ - Add type hints for all the operations (@stone-w4tch3r)
336
+ - Lowercase pip packages properly (PEP-0426)
337
+ - Rename `postgresql` -> `postgres` operations & facts (old ones still work)
338
+ - Improve IP/MAC parsing in `NetworkDevices` fact (@sudoBash418)
339
+ - Enable getting `Home` fact for other users (@matthijskooijman)
340
+ - Use users correct home directory in `server.user_authorized_keys` operation (@matthijskooijman)
341
+ - Fix `destination`/`not_destination` arguments in `iptables.rule` operation
342
+ - Fix remote dirs when executing from Windows in `files.sync` operation (@Renerick)
343
+ - Fix quoting of systemd unit names (@martenlienen)
344
+
345
+ ### Other Changes
346
+
347
+ - Add new `_if` global argument to control operation execution at runtime
348
+ - Add `--debug-all` flag to set debug logging for all packages
349
+ - Retry SSH connections on failure (configurable, see [SSH connector](https://docs.pyinfra.com/en/3.x/connectors/ssh.html#available-data)) (@fwiesel)
350
+ - Documentation typo fixes (@szepeviktor, @sudoBash418)
351
+ - Fix handling of binary files in Docker connector (@matthijskooijman)
352
+ - Add `will_change` attribute and `did_change` context manager to `OperationMeta`
353
+ - Replace use of `pkg_resources` with `importlib.metadata` (@diazona)
354
+ - Fix identifying Python inventory files as modules (@martenlienen)
355
+ - Fix typed arguments order (@cdleonard)
356
+ - Check that fact commands don't take global arguments (@martenlienen)
357
+
358
+ # v2.x
359
+
360
+ [See this file in the `2.x` branch](https://github.com/Fizzadar/pyinfra/blob/2.x/CHANGELOG.md).
361
+
362
+ # v1.x
363
+
364
+ [See this file in the `1.x` branch](https://github.com/Fizzadar/pyinfra/blob/1.x/CHANGELOG.md).