pyinfra 3.5.1__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.
- {pyinfra-3.5.1 → pyinfra-3.6}/.github/workflows/test.yml +16 -9
- {pyinfra-3.5.1 → pyinfra-3.6}/CHANGELOG.md +50 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/PKG-INFO +2 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/api/connectors.md +55 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/api/index.rst +1 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/cli.md +2 -2
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/compatibility.md +2 -3
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/conf.py +34 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/connectors.rst +8 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/contributing.md +2 -2
- pyinfra-3.6/docs/facts.rst +102 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/faq.rst +4 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/getting-started.rst +18 -4
- pyinfra-3.6/docs/operations.rst +73 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/using-operations.rst +38 -10
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/utils.py +2 -2
- pyinfra-3.6/pyinfra-metadata-schema-1.0.0.json +57 -0
- pyinfra-3.6/pyinfra-metadata.toml +550 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/pyproject.toml +3 -2
- pyinfra-3.6/scripts/build-public-docs.sh +61 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/generate_arguments_doc.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/generate_facts_docs.py +1 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/generate_operations_docs.py +1 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/make_github_release.py +1 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/__init__.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/arguments.py +7 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/exceptions.py +6 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/facts.py +17 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/host.py +3 -0
- pyinfra-3.6/src/pyinfra/api/metadata.py +69 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/operations.py +3 -3
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/util.py +22 -5
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/docker.py +25 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/ssh.py +57 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/util.py +16 -9
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/crontab.py +7 -7
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/files.py +1 -2
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/npm.py +1 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/server.py +18 -2
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/apk.py +2 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/apt.py +15 -7
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/brew.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/crontab.py +4 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/dnf.py +4 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/docker.py +62 -16
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/files.py +87 -12
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/flatpak.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/gem.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/git.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/iptables.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/lxd.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/mysql.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/opkg.py +2 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/pacman.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/pip.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/pipx.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/pkg.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/pkgin.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/postgres.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/puppet.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/python.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/selinux.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/server.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/snap.py +2 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/ssh.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/systemd.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/sysvinit.py +2 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/util/docker.py +164 -8
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/util/packaging.py +2 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/xbps.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/yum.py +4 -1
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/zfs.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/zypper.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra_cli/cli.py +13 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/npm.NpmPackages/local_packages.json +1 -1
- pyinfra-3.6/tests/facts/server.TmpDir/default_fallback.json +5 -0
- pyinfra-3.6/tests/facts/server.TmpDir/temp_set.json +5 -0
- pyinfra-3.6/tests/facts/server.TmpDir/tmp_set.json +5 -0
- pyinfra-3.6/tests/facts/server.TmpDir/tmpdir_set.json +5 -0
- pyinfra-3.6/tests/operations/apt.packages/update_cached_tz.json +17 -0
- pyinfra-3.6/tests/operations/docker.container/add_container_with_labels.json +19 -0
- pyinfra-3.6/tests/operations/docker.image/force_pull_image.json +27 -0
- pyinfra-3.6/tests/operations/docker.image/image_from_github_registry_exists.json +26 -0
- pyinfra-3.6/tests/operations/docker.image/image_with_digest_exists.json +24 -0
- pyinfra-3.6/tests/operations/docker.image/image_with_digest_not_exists.json +15 -0
- pyinfra-3.6/tests/operations/docker.image/image_with_latest_tag_always_pull.json +27 -0
- pyinfra-3.6/tests/operations/docker.image/image_with_specific_tag_exists.json +26 -0
- pyinfra-3.6/tests/operations/docker.image/image_with_specific_tag_not_exists.json +15 -0
- pyinfra-3.6/tests/operations/docker.image/image_with_tag_and_digest.json +16 -0
- pyinfra-3.6/tests/operations/docker.image/image_with_tag_and_digest_different_digest.json +15 -0
- pyinfra-3.6/tests/operations/docker.image/image_with_tag_and_digest_different_tag.json +26 -0
- pyinfra-3.6/tests/operations/docker.image/image_without_tag_always_pull.json +27 -0
- pyinfra-3.6/tests/operations/docker.image/pull_image_from_private_registry.json +15 -0
- pyinfra-3.6/tests/operations/docker.image/remove_existing_image.json +26 -0
- pyinfra-3.6/tests/operations/docker.image/remove_nonexistent_image.json +13 -0
- pyinfra-3.6/tests/operations/files.block/add_existing_block_different_content.json +24 -0
- pyinfra-3.6/tests/operations/files.block/add_existing_block_different_content_and_backup.json +25 -0
- pyinfra-3.6/tests/operations/files.block/add_existing_block_different_content_multiple_lines.json +28 -0
- pyinfra-3.6/tests/operations/files.block/add_no_existing_block_and_no_line.json +22 -0
- pyinfra-3.6/tests/operations/files.block/add_no_existing_block_line_provided.json +22 -0
- pyinfra-3.6/tests/operations/files.block/add_no_existing_block_line_provided_escape_regex.json +23 -0
- pyinfra-3.6/tests/operations/files.block/add_no_existing_file.json +22 -0
- pyinfra-3.6/tests/operations/files.block/remove_but_content_not_none.json +23 -0
- pyinfra-3.6/tests/operations/files.block/remove_existing_block.json +22 -0
- pyinfra-3.6/tests/operations/files.copy/copies_directory.json +22 -0
- pyinfra-3.6/tests/operations/files.copy/copies_directory_overwriting.json +21 -0
- pyinfra-3.6/tests/operations/files.copy/copies_file.json +19 -0
- pyinfra-3.6/tests/operations/files.copy/copies_file_overwriting.json +19 -0
- pyinfra-3.6/tests/operations/files.copy/invalid_dest.json +21 -0
- pyinfra-3.6/tests/operations/files.copy/invalid_overwrite.json +26 -0
- pyinfra-3.6/tests/operations/files.copy/invalid_src.json +21 -0
- pyinfra-3.6/tests/operations/files.copy/noop_dest_file_exists.json +24 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/test_cli.py +1 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_connectors/test_docker.py +50 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_connectors/test_ssh.py +89 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_facts.py +3 -1
- pyinfra-3.6/tests/test_operations_utils.py +297 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/util.py +3 -0
- pyinfra-3.6/uv.lock +1931 -0
- pyinfra-3.5.1/docs/facts.rst +0 -60
- pyinfra-3.5.1/docs/operations.rst +0 -56
- pyinfra-3.5.1/scripts/build-public-docs.sh +0 -37
- pyinfra-3.5.1/tests/operations/crontab.crontab/edit_existing_with_newline.json +0 -26
- pyinfra-3.5.1/tests/operations/docker.image/pull_image.json +0 -12
- pyinfra-3.5.1/tests/operations/docker.image/remove_image.json +0 -12
- pyinfra-3.5.1/tests/operations/files.block/add_existing_block_different_content.json +0 -17
- pyinfra-3.5.1/tests/operations/files.block/add_existing_block_different_content_and_backup.json +0 -18
- pyinfra-3.5.1/tests/operations/files.block/add_existing_block_different_content_multiple_lines.json +0 -17
- pyinfra-3.5.1/tests/operations/files.block/add_no_existing_block_and_no_line.json +0 -17
- pyinfra-3.5.1/tests/operations/files.block/add_no_existing_block_line_provided.json +0 -17
- pyinfra-3.5.1/tests/operations/files.block/add_no_existing_block_line_provided_escape_regex.json +0 -18
- pyinfra-3.5.1/tests/operations/files.block/add_no_existing_file.json +0 -17
- pyinfra-3.5.1/tests/operations/files.block/remove_but_content_not_none.json +0 -16
- pyinfra-3.5.1/tests/operations/files.block/remove_existing_block.json +0 -15
- pyinfra-3.5.1/tests/test_operations_utils.py +0 -17
- pyinfra-3.5.1/uv.lock +0 -1683
- {pyinfra-3.5.1 → pyinfra-3.6}/.editorconfig +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/.git-blame-ignore-revs +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/.github/FUNDING.yml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/.github/workflows/docs.yml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/.gitignore +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/.typos.toml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/CONTRIBUTING.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/LICENSE.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/README.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/codecov.yml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/api/deploys.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/api/facts.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/api/operations.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/api/reference.rst +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/arguments.rst +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/changes.rst +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/deploy-process.rst +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/examples/client_side_assets.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/examples/data_multiple_environments.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/examples/dynamic_execution_deploy.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/examples/dynamic_inventories_data.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/examples/groups_roles.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/examples/secret_storage.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/examples.rst +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/index.rst +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/install.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/inventory-data.rst +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/performance.rst +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/static/logo_small.png +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/static/performance.png +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/docs/support.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/examples/README.md +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/cleanup_words.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/dev-lint.sh +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/dev-test-e2e.sh +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/dev-test.sh +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/generate_api_docs.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/generate_connectors_docs.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/generate_next_version.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/generate_redirect_pages.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/pyinfra-complete.sh +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/pyinfra-complete.zsh +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/release.sh +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/scripts/spellcheck.sh +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/__main__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/arguments_typed.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/command.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/config.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/connect.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/connectors.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/deploy.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/inventory.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/operation.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/api/state.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/base.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/chroot.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/dockerssh.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/local.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/scp/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/scp/client.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/ssh_util.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/sshuserclient/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/sshuserclient/client.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/sshuserclient/config.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/terraform.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/connectors/vagrant.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/context.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/apk.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/apt.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/brew.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/bsdinit.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/cargo.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/choco.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/deb.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/dnf.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/docker.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/efibootmgr.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/flatpak.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/freebsd.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/gem.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/git.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/gpg.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/hardware.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/iptables.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/launchd.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/lxd.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/mysql.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/openrc.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/opkg.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/pacman.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/pip.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/pipx.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/pkg.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/pkgin.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/podman.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/postgres.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/postgresql.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/rpm.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/runit.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/selinux.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/snap.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/systemd.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/sysvinit.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/upstart.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/util/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/util/databases.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/util/packaging.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/util/units.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/util/win_files.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/vzctl.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/xbps.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/yum.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/zfs.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/facts/zypper.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/local.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/bsdinit.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/cargo.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/choco.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/freebsd/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/freebsd/freebsd_update.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/freebsd/pkg.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/freebsd/service.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/freebsd/sysrc.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/launchd.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/npm.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/openrc.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/postgresql.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/runit.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/upstart.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/util/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/util/files.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/util/service.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/operations/vzctl.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/progress.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/py.typed +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra/version.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra_cli/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra_cli/commands.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra_cli/exceptions.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra_cli/inventory.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra_cli/log.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra_cli/main.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra_cli/prints.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra_cli/util.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/src/pyinfra_cli/virtualenv.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/end-to-end/conftest.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/end-to-end/test_e2e_docker.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/end-to-end/test_e2e_local.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/end-to-end/test_e2e_podman.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/end-to-end/test_e2e_ssh.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/apk.ApkPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/apk.ApkPackages/packages_2.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/apt.AptKeys/keys.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/apt.AptSources/component_with_number.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/apt.AptSources/sources.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/apt.SimulateOperationWillChange/upgrade-nochanges.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/apt.SimulateOperationWillChange/upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/brew.BrewCasks/casks.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/brew.BrewPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/brew.BrewTaps/taps.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/brew.BrewVersion/bad_output.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/brew.BrewVersion/version.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/cargo.CargoPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/choco.ChocoPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/choco.ChocoVersion/version.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/crontab.Crontab/comments.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/crontab.Crontab/simple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/crontab.Crontab/simple_user.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/deb.DebPackage/package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/deb.DebPackage/whitespace.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/deb.DebPackages/hold_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/deb.DebPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/dnf.DnfRepositories/repos-with-spaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/dnf.DnfRepositories/repos.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/docker.DockerContainer/container.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/docker.DockerContainers/container.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/docker.DockerImages/images.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/docker.DockerPlugin/plugin.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/docker.DockerPlugins/plugins.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/efibootmgr.EFIBootMgr/boot_entries.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/efibootmgr.EFIBootMgr/boot_entries2.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/efibootmgr.EFIBootMgr/boot_entries_complex.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/efibootmgr.EFIBootMgr/not_uefi.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Block/defaults.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Block/no_markers_found.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Block/not_found.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Directory/file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Directory/link.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Directory/ls_fallback.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Directory/ls_fallback_freebsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Directory/ls_fallback_macos.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Directory/valid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/directory.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/invalid_output.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/link.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/ls_fallback.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/ls_fallback_selinux.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/ls_fallback_time.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/mode_setgid_setuid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/mode_sticky.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/tilde.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/tilde_with_space.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/valid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/valid_needs_quotes.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.File/valid_with_space.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FileContents/file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FileContents/no_file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FindDirectories/directories.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FindFiles/files.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FindFiles/files_with_name.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FindFiles/files_with_name_wildcard.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FindInFile/lines.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FindInFile/lines_interpolate.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FindInFile/lines_no_interpolate.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FindInFile/lines_quote.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FindInFile/no_file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FindInFile/no_matches.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.FindLinks/links.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Flags/bad_output.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Flags/no_flags_set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Flags/no_output.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Flags/one_flag_set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Flags/too_much_output.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Flags/two_flags_set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Link/directory.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Link/file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Link/ls_fallback.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Link/valid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Link/valid_centos6.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Md5File/file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Md5File/file_bsd_style.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Md5File/file_needs_quotes.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Sha1File/file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Sha1File/file_bsd_style.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Sha1File/file_needs_quotes.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Sha256File/file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Sha256File/file_bsd_style.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Sha256File/file_needs_quotes.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Sha384File/file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Sha384File/file_bsd_style.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/files.Sha384File/file_needs_quotes.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/flatpak.FlatpakPackage/kodi.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/flatpak.FlatpakPackage/not_found.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/flatpak.FlatpakPackage/vlc.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/flatpak.FlatpakPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/freebsd.PkgPackage/package-with-jail.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/freebsd.PkgPackage/package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/freebsd.ServiceScript/found.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/freebsd.ServiceScript/not-found.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/freebsd.ServiceStatus/not-running.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/freebsd.ServiceStatus/running.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/freebsd.Sysrc/found.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/freebsd.Sysrc/not-found.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/gem.GemPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/git.GitBranch/branch.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/git.GitConfig/global.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/git.GitConfig/multi_value.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/git.GitConfig/repo.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/git.GitTag/tag.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/git.GitTrackingBranch/branch.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/git.GitTrackingBranch/branch_behind.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/git.GitTrackingBranch/no_branch.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/gpg.GpgKey/key_from_file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/gpg.GpgKey/key_from_url.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/gpg.GpgKeys/keys.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/gpg.GpgKeys/keys_keyring.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/gpg.GpgSecretKeys/keys.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/gpg.GpgSecretKeys/keys_keyring.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.BlockDevices/devices.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.Cpus/invalid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.Cpus/valid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.Ipv4Addresses/linux_ip.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.Ipv4Addrs/linux_ip_multiple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.Ipv6Addresses/linux_ip.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.Ipv6Addrs/linux_ip_multiple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.Memory/vmstat_bsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.Memory/vmstat_linux.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.NetworkDevices/linux_ifconfig.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.NetworkDevices/linux_ifconfig_multiple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.NetworkDevices/linux_ip.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.NetworkDevices/linux_ip_multiple_addrs.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.NetworkDevices/linux_ip_multiple_ifaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/hardware.NetworkDevices/macos_ifconfig.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/iptables.Ip6tablesChains/chains.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/iptables.Ip6tablesRules/rules.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/iptables.IptablesChains/chains.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/iptables.IptablesRules/rules.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/launchd.LaunchdStatus/services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/lxd.LxdContainers/stripped.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/mysql.MysqlDatabases/multiple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/mysql.MysqlDatabases/multiple_custom_connection.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/mysql.MysqlUserGrants/multiple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/mysql.MysqlUsers/multiple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/npm.NpmPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/openrc.OpenrcEnabled/services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/openrc.OpenrcEnabled/services_runlevel.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/openrc.OpenrcStatus/services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/openrc.OpenrcStatus/services_runlevel.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/opkg.OpkgConf/opkg_conf.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/opkg.OpkgFeeds/opkg_feeds.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/opkg.OpkgInstallableArchitectures/opkg_installable_architectures.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/opkg.OpkgPackages/opkg_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/opkg.OpkgUpgradeablePackages/opkg_upgradeable_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/pacman.PacmanPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/pip.Pip3Packages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/pip.PipPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/pip.PipPackages/packages_pip3.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/pipx.PipxEnvironment/environment.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/pipx.PipxPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/pkg.PkgPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/pkgin.PkginPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/podman.PodmanPs/empty.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/podman.PodmanPs/onecontainer.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/podman.PodmanSystemInfo/info1.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/postgresql.PostgresqlDatabases/multiple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/postgresql.PostgresqlRoles/multiple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/postgresql.PostgresqlRoles/multiple_custom_connection.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/rpm.RpmPackage/package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/rpm.RpmPackageProvides/package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/rpm.RpmPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/runit.RunitManaged/single.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/runit.RunitManaged/status.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/runit.RunitStatus/single.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/runit.RunitStatus/status.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.FileContext/file_context.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.FileContextMapping/found.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.FileContextMapping/not_found.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.SEBoolean/get.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.SEPort/generic_and_specific.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.SEPort/get_bad_port.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.SEPort/only_generic.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.SEPorts/line_noise_input.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.SEPorts/multiple_single_ports.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.SEPorts/only_single_port.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.SEPorts/port_range.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/selinux.SEPorts/single_and_range.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Arch/arch.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Command/command.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Date/date.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Groups/groups.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.HasGui/gui_absent.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.HasGui/gui_present.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Home/home.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Home/root.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Home/some_user.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Hostname/hostname.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.KernelModules/modules.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.LinuxDistribution/archlinux.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.LinuxDistribution/centos-6.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.LinuxDistribution/centos-7.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.LinuxDistribution/no_match.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.LinuxDistribution/ubuntu.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.LinuxGui/gnome_present.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.LinuxName/ubuntu.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Locales +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.LsbRelease/release.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Mounts/mounts.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Os/os.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.OsVersion/os_version.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Port/empty.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Port/one-process.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Port/two-processes.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.RebootRequired/alpine_reboot_required.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.RebootRequired/freebsd_reboot_required.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.RebootRequired/linux_no_reboot.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.RebootRequired/linux_reboot_required.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.SecurityLimits/security_limits.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Selinux/no-output.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Selinux/selinux.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Sysctl/sysctl_linux.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Sysctl/sysctl_macos.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Users/mixed.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/server.Which/which.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/snap.SnapPackage/lxd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/snap.SnapPackage/not_found.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/snap.SnapPackage/snapd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/snap.SnapPackage/vlc.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/snap.SnapPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/systemd.SystemdEnabled/machine_services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/systemd.SystemdEnabled/root_machine_services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/systemd.SystemdEnabled/services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/systemd.SystemdEnabled/user_machine_services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/systemd.SystemdEnabled/user_services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/systemd.SystemdStatus/machine_services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/systemd.SystemdStatus/root_machine_services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/systemd.SystemdStatus/services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/systemd.SystemdStatus/services_invalid_output.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/systemd.SystemdStatus/user_machine_services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/systemd.SystemdStatus/user_services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/sysvinit.InitdStatus/services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/upstart.UpstartStatus/services.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/vzctl.OpenvzContainers/containers.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/xbps.XbpsPackages/dot-in-package-name.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/xbps.XbpsPackages/packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/yum.YumRepositories/repos.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/zfs.Datasets/datasets.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/zfs.Filesystems/filesystems.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/zfs.Pools/pools.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/zfs.Snapshots/snapshots.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/zfs.Volumes/volumes.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/facts/zypper.ZypperRepositories/repos.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apk.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apk.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apk.packages/upgrade_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apk.packages/upgrade_update.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apk.upgrade/upgrade_available.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.deb/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.deb/add_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.deb/download_add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.deb/remove_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.deb/remove_no_exist.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.dist_upgrade/dist_upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.dist_upgrade/dist_upgrade_autoremove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.key/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.key/add_exists.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.key/add_keyserver.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.key/add_keyserver_exists.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.key/add_keyserver_multiple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.key/add_keyserver_multiple_partial.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.key/add_keyserver_no_keyid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.key/add_no_gpg.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.key/add_url.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/add_package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/add_package_allow_downgrades.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/add_package_force.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/add_package_no_recommends.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/install_with_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/remove_packages_with_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/update_cache_old.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/update_cached.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/update_nocache.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/update_upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.packages/upgrade_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.ppa/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.ppa/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.repo/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.repo/add_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.repo/add_filename.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.repo/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.upgrade/upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/apt.upgrade/upgrade_autoremove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.cask_upgrade/new_cli_upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.cask_upgrade/old_cli_upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.casks/add_casks_upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.casks/new_cli_add_casks.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.casks/old_cli_add_casks.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.packages/upgrade_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.packages/upgrade_update.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.tap/add_exists.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.tap/add_tap.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.tap/add_tap_bad_url.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.tap/add_tap_no_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.tap/add_tap_url.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.tap/add_tap_url_exists.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.tap/add_tap_url_no_src.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.tap/remove_no_exists.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.tap/remove_tap.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/brew.upgrade/upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/bsdinit.service/disabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/bsdinit.service/enabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/bsdinit.service/reload.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/bsdinit.service/skip_started.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/bsdinit.service/start.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/bsdinit.service/stop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/cargo.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/cargo.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/choco.install/install.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/choco.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/choco.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/crontab.crontab/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/crontab.crontab/add_another.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/crontab.crontab/add_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/crontab.crontab/add_existing_int.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/crontab.crontab/add_named.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/crontab.crontab/add_special_time.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/crontab.crontab/add_user.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/crontab.crontab/edit.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/crontab.crontab/edit_named.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/crontab.crontab/edit_special_time.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/crontab.crontab/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.key/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.packages/install_with_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.packages/install_with_nobest.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.packages/noop_add_package_alias.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.packages/remove_package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.packages/uninstall_with_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.packages/update_clean.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.repo/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.repo/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.rpm/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.rpm/add_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.rpm/add_existing_upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.rpm/add_url.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/dnf.rpm/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.container/add_and_start_no_existent_container.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.container/add_existent_container.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.container/add_no_existent_container.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.container/remove_container.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.container/start_container.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.container/stop_container.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.network/add_network.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.network/add_network_macvlan_with_aux_addresses.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.network/add_network_with_gateway.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.network/add_network_with_ip_range.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.network/add_network_with_opts.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.network/remove_network.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.plugin/disable_plugin.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.plugin/enable_plugin.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.plugin/install_plugin.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.plugin/install_plugin_disabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.plugin/install_plugin_with_alias_and_options.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.plugin/remove_plugin.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.plugin/set_plugin_options.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.plugin/set_plugin_options_disabled_plugin.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.volume/add_volume.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.volume/add_volume_with_driver.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/docker.volume/add_volume_with_labels.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.block/add_existing_block_same_content.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.block/add_line_given_but_before_eq_after.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.block/add_no_content_provided.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.block/add_no_existing_block_and_non_str_line_given.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.block/add_no_line_given_but_before_ne_after.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.block/remove_no_existing_block.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.block/remove_no_file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.directory/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.directory/add_force.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.directory/add_force_backup_dir.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.directory/add_force_no_backup.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.directory/add_with_spaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.directory/delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.directory/edit.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.directory/edit_with_spaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.directory/ignore_link_type.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.directory/invalid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.directory/invalid_type.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_cache_time.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_cache_time_needs_refresh.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_directory.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_existing_checksum.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_extra_args_curl.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_extra_args_wget.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_headers_curl.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_headers_wget.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_insecure_curl.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_insecure_wget.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_needs_quotes.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_no_curl_no_wget.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_proxy_curl.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_proxy_wget.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_wget.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_with_checksums.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/download_with_checksums_needs_quotes.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/pathlib_download.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.download/skip_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/add_force.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/add_force_backup_dir.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/add_force_backup_dir_nested.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/add_force_no_backup.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/add_special_chars.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/add_with_spaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/create_directory.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/delete_with_spaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/edit.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/edit_nothing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/invalid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/invalid_type.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.file/touch.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/clear_no_flags.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/clear_one_flag_already_clear.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/clear_one_flag_was_set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/clear_two_flags.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/clear_two_flags_already_clear.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/clear_two_flags_first_already_clear.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/clear_two_flags_second_already_clear.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/set_no_flags.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/set_one_flag_already_set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/set_one_flag_not_yet_set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/set_two_flags.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/set_two_flags_already_set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/set_two_flags_first_already_set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.flags/set_two_flags_second_already_set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.get/create_directory.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.get/different_remote.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.get/fallback_md5.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.get/fallback_sha256.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.get/no_change_md5.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.get/no_change_sha256.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.get/no_local.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.get/no_remote.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.get/path_with_spaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.get/path_with_spaces_already_escaped.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.get/pathlib_path_with_spaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.line/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.line/add_backup.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.line/add_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.line/add_replace.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.line/add_replace_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.line/add_with_quote.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.line/edit.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.line/edit_backup.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.line/pathlib_edit.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/add_force.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/add_force_backup_dir.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/add_force_no_backup.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/add_no_target.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/add_with_spaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/create_directory.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/edit.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/edit_nothing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/invalid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/invalid_type.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.link/pathlib_edit.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.move/directory.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.move/invalid_dest.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.move/invalid_src.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.move/link.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.move/no_conflict.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.move/no_overwrite.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.move/overwrite.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/atime_mtime_sub_second.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/change_atime_eq_mtime_ref_remote.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/change_mode_owner.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/change_mode_owner_with_spaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/change_mtime_arg_no_tz.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/change_mtime_atime_ref_local file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/copy_local_permissions.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/create_directory.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/different_remote.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/fallback_md5.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/fallback_sha256.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/no_change.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/no_change_atime_mtime.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/no_change_md5.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/no_change_same_mode_as_local.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/no_change_sha256.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/no_local.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/no_remote.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/path_with_spaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/path_with_spaces_already_escaped.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/pathlib_with_spaces.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.put/upload_to_directory.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.replace/no_match.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.replace/replace_double_quotes_interpolate.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.replace/replace_double_quotes_no_interpolate.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.replace/replace_single_quotes_interpolate.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.replace/replace_single_quotes_no_interpolate.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.replace/simple_interpolate.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.replace/simple_no_interpolate.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.sync/sync_delete_posix.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.sync/sync_delete_windows.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.sync/sync_destination_link.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.sync/sync_exclude_multiple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.sync/sync_no_destination_exist.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.sync/sync_no_local_exist_posix.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.sync/sync_no_local_exist_windows.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.sync/sync_partial_exists.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.sync/sync_special_chars.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.template/invalid_template_syntax.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.template/no_remote.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/files.template/undefined_template_variable.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/flatpak.packages/install_package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/flatpak.packages/install_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/flatpak.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.freebsd_update.update/update.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.autoremove/autoremove-with-jail.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.autoremove/autoremove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.clean/clean-all-with-jail.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.clean/clean-all.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.clean/clean-with-jail.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.clean/clean.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.install/install-with-custom-repo.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.install/install-with-jail-and-custom-repo.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.install/install-with-jail.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.install/install.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.remove/remove-with-jail.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.remove/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.update/update.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.pkg.upgrade/upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.service.service/custom.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.service.service/reload.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.service.service/restart.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.service.service/start.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.service.service/stop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.sysrc.sysrc/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.sysrc.sysrc/del.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.sysrc.sysrc/set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/freebsd.sysrc.sysrc/sub.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/gem.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/gem.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.bare_repo/chmod.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.bare_repo/delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.bare_repo/init.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.config/add_existing_multi_value.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.config/add_first_multi_value.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.config/add_second_multi_value.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.config/edit_global.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.config/edit_system.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.config/set_existing_global.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.config/set_existing_system.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.config/set_global.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.config/set_repo.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.config/set_system.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.repo/branch_pull.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.repo/clone.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.repo/clone_keyscan.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.repo/clone_keyscan_invalid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.repo/rebase.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.repo/recursive_submodules.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.repo/update_submodules.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/create.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/create_detached.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/create_detached_from_commitish.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/create_existing_branch.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/create_force.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/create_from_commitish.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/create_new_branch.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/create_new_branch_from_commitish.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/pull.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/pull_disable.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/pull_from_bad_remote_branch.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/pull_from_remote_branch.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/pull_rebase from_remote_branch.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/pull_rebase.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/git.worktree/remove_force.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.chain/add_chain.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.chain/delete_chain.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.chain/delete_chain_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.chain/edit_chain.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/add_log_rule.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/add_rule.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/add_to_ports.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/add_to_source.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/add_v6_rule.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/already_absent.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/already_present.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/delete_rule.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/invalid_destination_port.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/invalid_log_prefix.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/invalid_source_destination.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/invalid_to_destination.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/iptables.rule/invalid_to_ports.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/launchd.service/restart.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/launchd.service/restart_stopped.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/launchd.service/start.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/launchd.service/start_running.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/launchd.service/stop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/lxd.container/add_container.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/lxd.container/already_absent.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/lxd.container/already_present.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/lxd.container/delete_container.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/lxd.container/delete_running_container.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.database/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.database/add_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.database/add_privileges.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.database/delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.database/delete_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.dump/dump.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.load/load.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.load/load_space.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/add_all_with_grant_option.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/add_database.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/add_delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/add_delete_usage.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/add_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/add_table.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/add_table_invalid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/add_with_grant_option.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/delete_all.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/delete_all_with_grant_option.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/delete_with_grant_option.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/remove_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.privileges/remove_usage.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.sql/execute.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.sql/execute_mysql_kwargs.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/add_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/add_password.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/add_privileges.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/add_resources.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/add_ssl.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/add_x509.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/add_x509_specified.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/invalid_require_cipher.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/invalid_require_issuer.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/invalid_require_subject.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/invalid_require_type.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/remove_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/update_resources.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/update_resources_partial.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/update_ssl.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/update_x509.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/update_x509_specified.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/mysql.user/update_x509_specified_partial.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/npm.packages/add_local_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/npm.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/npm.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/openrc.service/disable.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/openrc.service/disable_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/openrc.service/disable_runlevel.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/openrc.service/enable.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/openrc.service/enable_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/openrc.service/enable_runlevel.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/openrc.service/running_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/openrc.service/start.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/openrc.service/stop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/openrc.service/stopped_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/opkg.packages/add_existing_package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/opkg.packages/add_multiple_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/opkg.packages/add_one_package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/opkg.packages/add_with_unallowed_pinning.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/opkg.packages/list_of_nulls_package_list.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/opkg.packages/null_package_list.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/opkg.packages/remove_existing_package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/opkg.packages/remove_existing_package_and_require_update.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/opkg.packages/remove_not_existing_package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/opkg.packages/update_then_add_one.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/opkg.update/first_update.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pacman.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pacman.packages/add_packages_group_expand.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pacman.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pacman.packages/remove_packages_expand.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pacman.packages/upgrade_update.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/add_existing_package_with_url.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/add_new_virtualenv_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/add_packages_case_insensitive.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/add_virtualenv_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/install_extra_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/install_latest_requirements.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/install_requirements.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/install_virtualenv_requirements.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/uninstall_requirements.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/use_pip3.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.packages/use_pip3_virtualenv.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.venv/add_virtualenv.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.virtualenv/add_virtualenv.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.virtualenv/add_virtualenv_py3.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.virtualenv/add_with_options.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.virtualenv/already_absent.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.virtualenv/already_present.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.virtualenv/delete_virtualenv.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.virtualenv/present_empty_directory.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.virtualenv/use_stdlib_venv.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pip.virtualenv/use_stdlib_venv_py3.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pipx.ensure_path/ensure_path.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pipx.packages/add_existing_package_with_url.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pipx.packages/add_nothing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pipx.packages/add_package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pipx.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pipx.packages/install_extra_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pipx.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pipx.upgrade_all/upgrade_all.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pkg.packages/pkg_add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pkg.packages/pkg_add_packages_with_installurl.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pkg.packages/pkg_delete_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pkg.packages/pkg_install_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pkg.packages/pkg_remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pkgin.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pkgin.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pkgin.packages/upgrade_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/pkgin.packages/upgrade_update.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.database/add_database.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.database/add_database_locales.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.database/add_database_owner.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.database/remove_database.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.database/remove_database_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.database/update_database.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.database/update_database_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.dump/dump.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.load/load.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.role/role_remove_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.role/role_update.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.role/role_update_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.role/user_add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.role/user_add_no_login.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.role/user_add_privileges.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.role/user_add_replication.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.role/user_add_super.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.role/user_remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/postgresql.sql/execute.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/puppet.agent/run_agent.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/python.call/call_func.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/python.raise_exception/call_func.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/runit.manage/manage.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/runit.manage/unmanage.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/runit.service/disable.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/runit.service/enable.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.boolean/bad_value.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.boolean/change_not_persistent.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.boolean/change_persistent.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.boolean/no_change.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.file_context/change.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.file_context/no_change.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.file_context_mapping/add_None.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.file_context_mapping/add_different.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.file_context_mapping/add_no_change.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.file_context_mapping/add_none_existeing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.file_context_mapping/delete_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.file_context_mapping/delete_none_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/add_None.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/add_different.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/add_different_direct.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/add_not_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/add_not_existing_direct.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/add_not_existing_protocol.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/add_same.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/add_same_direct.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/remove_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/remove_existing_direct.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/remove_not_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/selinux.port/remove_not_existing_direct.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.group/add.freebsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.group/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.group/delete.freebsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.group/delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.hostname/hostname_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.hostname/hostnamectl_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.hostname/set_hostname_bsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.hostname/set_hostname_linux.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.hostname/set_hostnamectl_linux.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.locale/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.locale/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.modprobe/add-list.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.modprobe/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.modprobe/add_exists.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.modprobe/add_force.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.modprobe/add_multiple_exists.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.modprobe/remove-list.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.modprobe/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.mount/mount.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.mount/mount_device.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.mount/mount_device_fstype.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.mount/mount_exists.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.mount/mount_options.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.mount/remount_options.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.mount/unmount.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.packages/add_apk_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.packages/add_dnf_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.packages/add_yum_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.reboot/reboot.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.script/upload_run.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.script_template/script.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.security_limit/set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.service/invalid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.service/start_initd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.service/start_initd_service.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.service/start_openrc.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.service/start_rcd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.service/start_runit.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.service/start_systemd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.service/start_upstart.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.shell/shell.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.shell/single_shell.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.sysctl/set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.sysctl/set_list.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.sysctl/set_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.sysctl/set_noop_string_value.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.sysctl/set_noop_zero_int.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.sysctl/set_persist.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/add.freebsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/add_group_exists.freebsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/add_group_exists.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/add_home_is_link.freebsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/add_home_is_link.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/add_invalid_home_is_file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/add_non_unique.freebsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/add_non_unique.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/append_secondary_existing_groups.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/append_secondary_groups.freebsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/append_secondary_groups.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/delete.freebsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/edit.freebsd.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/edit.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/exists_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/key_files.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/keys.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/keys_delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/keys_nohome.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.user/keys_single.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/server.wait/port.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/snap.package/install_package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/snap.package/install_package_classic.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/snap.package/install_package_with_channel.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/snap.package/install_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/snap.package/install_refresh_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/snap.package/refresh_package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/snap.package/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.command/command.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.command/command_quotes.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.command/command_user_port.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.download/download.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.download/download_exists.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.download/download_exists_force.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.download/download_not_file.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.keyscan/scan_not_present.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.keyscan/scan_present.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.keyscan/scan_present_force.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.upload/upload.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.upload/upload_remote_sudo.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/ssh.upload/upload_remote_sudo_user.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/daemon_reload.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/disabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/enabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/machine_daemon_reload.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/machine_disabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/machine_enabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/machine_start.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/running_ambiguous_unit.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/running_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/running_timer.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/start.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/stopped_noop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/timer.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/user_daemon_reload.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/user_disabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/user_enabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/user_machine_daemon_reload.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/user_machine_disabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/user_machine_enabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/user_machine_start.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/systemd.service/user_start.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.enable/create.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.service/command.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.service/disabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.service/enabled_chkconfig.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.service/enabled_rc-update.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.service/enabled_update-rc.d.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.service/reload.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.service/restart.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.service/restart_down.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.service/skip_started.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.service/start.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/sysvinit.service/stop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/upstart.service/disabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/upstart.service/enabled.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/upstart.service/running.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.create/add_template.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.create/already_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.delete/delete.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.mount/mount.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.restart/restart.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.restart/restart_force.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.set/set.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.set/set_multiple.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.set/set_no_save.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.start/start.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.start/start_force.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.stop/stop.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/vzctl.unmount/unmount.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/xbps.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/xbps.packages/remove_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/xbps.packages/upgrade_update.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.key/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/add_packages_alias.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/add_packages_alias_different_version.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/add_packages_alias_multiple_version.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/install_with_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/install_with_nobest.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/noop_add_packages_alias.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/noop_add_packages_alias_multiple_version.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/remove_package.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/remove_packages_alias_multiple_version.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/uninstall_with_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.packages/update_clean.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.repo/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.repo/add_url.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.repo/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.rpm/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.rpm/add_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.rpm/add_existing_upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.rpm/add_url.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/yum.rpm/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.dataset/create.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.dataset/create_noop.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.dataset/create_recursive.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.dataset/create_sparse.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.dataset/create_volume.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.dataset/delete.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.dataset/delete_noop.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.dataset/delete_recursive.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.dataset/set_props.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.filesystem/create.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.filesystem/delete.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.snapshot/create.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zfs.volume/create.yaml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.key/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.packages/add_packages.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.packages/install_with_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.packages/install_with_global_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.packages/uninstall_with_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.packages/uninstall_with_global_args.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.packages/update_clean.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.repo/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.repo/add_url.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.repo/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.rpm/add.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.rpm/add_existing.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.rpm/add_existing_upgrade.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.rpm/add_url.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/operations/zypper.rpm/remove.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/paramiko_util.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_api/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_api/test_api.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_api/test_api_arguments.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_api/test_api_command.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_api/test_api_config.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_api/test_api_deploys.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_api/test_api_facts.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_api/test_api_host.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_api/test_api_inventory.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_api/test_api_operations.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_api/test_api_util.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/deploy.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/deploy_random.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/files/a_file +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/group_data/all.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/group_data/invalid.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/group_data/leftover_data.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/inventories/inventory.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/inventories/inventory_all.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/inventories/inventory_ansible +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/inventories/inventory_ansible.json +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/inventories/inventory_ansible.yml +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/tasks/a_task.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/tasks/another_task.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/tasks/b_task.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/tasks/nested/empty_task.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/templates/a_template.j2 +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy/utils.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy_fails/invalid_argument_type.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy_fails/invalid_operation_arg.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/deploy_fails/operation_error.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/inventories/invalid.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/test_cli_deploy.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/test_cli_exceptions.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/test_cli_inventory.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/test_cli_util.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/test_context_objects.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/user/test_ops.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_cli/util.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_connectors/__init__.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_connectors/test_chroot.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_connectors/test_dockerssh.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_connectors/test_local.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_connectors/test_sshuserclient.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_connectors/test_terraform.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_connectors/test_util.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_connectors/test_vagrant.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_global_arguments.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_operations.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/test_units.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/typing/invalid/operation_kwarg.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/typing/invalid/operation_kwarg_value.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/typing/valid/operation.py +0 -0
- {pyinfra-3.5.1 → pyinfra-3.6}/tests/words.txt +0 -0
|
@@ -50,10 +50,19 @@ jobs:
|
|
|
50
50
|
needs:
|
|
51
51
|
- lint
|
|
52
52
|
- type-check
|
|
53
|
+
- spell-check
|
|
53
54
|
strategy:
|
|
54
55
|
matrix:
|
|
55
|
-
os: [
|
|
56
|
-
|
|
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"
|
|
57
66
|
runs-on: ${{ matrix.os }}
|
|
58
67
|
steps:
|
|
59
68
|
- uses: actions/checkout@v5
|
|
@@ -75,27 +84,24 @@ jobs:
|
|
|
75
84
|
needs:
|
|
76
85
|
- lint
|
|
77
86
|
- type-check
|
|
87
|
+
- spell-check
|
|
78
88
|
strategy:
|
|
79
89
|
matrix:
|
|
80
90
|
os: [ubuntu-22.04, ubuntu-24.04]
|
|
81
91
|
test-name: [local, ssh, docker, podman]
|
|
82
|
-
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
83
92
|
include:
|
|
84
|
-
- os: macos-13
|
|
85
|
-
test-name: local
|
|
86
|
-
python-version: "3.13"
|
|
87
93
|
- os: macos-14
|
|
88
94
|
test-name: local
|
|
89
|
-
python-version: "3.13"
|
|
90
95
|
- os: macos-15
|
|
91
96
|
test-name: local
|
|
92
|
-
|
|
97
|
+
- os: macos-26
|
|
98
|
+
test-name: local
|
|
93
99
|
runs-on: ${{ matrix.os }}
|
|
94
100
|
steps:
|
|
95
101
|
- uses: actions/checkout@v5
|
|
96
102
|
- uses: actions/setup-python@v5
|
|
97
103
|
with:
|
|
98
|
-
python-version:
|
|
104
|
+
python-version: "3.13"
|
|
99
105
|
- name: Install uv
|
|
100
106
|
uses: astral-sh/setup-uv@v6
|
|
101
107
|
- run: uv sync --group test --no-default-groups --python=${{ matrix.python-version }}
|
|
@@ -108,6 +114,7 @@ jobs:
|
|
|
108
114
|
needs:
|
|
109
115
|
- lint
|
|
110
116
|
- type-check
|
|
117
|
+
- spell-check
|
|
111
118
|
- unit-test
|
|
112
119
|
- end-to-end-test
|
|
113
120
|
runs-on: ubuntu-latest
|
|
@@ -1,3 +1,52 @@
|
|
|
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
|
+
|
|
1
50
|
# v3.5.1
|
|
2
51
|
|
|
3
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):
|
|
@@ -40,6 +89,7 @@ New release with some really awesome new features, brought to you by the fantast
|
|
|
40
89
|
- enable using SCP instead of SFTP for SSH file transfers (@DonDebonair)
|
|
41
90
|
|
|
42
91
|
New and updated operations/facts:
|
|
92
|
+
|
|
43
93
|
- facts/server: add `RebootRequired` fact (@wowi42)
|
|
44
94
|
- operations/pip: support PEP-508 package versions (@morrison12)
|
|
45
95
|
- operations+facts/docker: add Docker plugin support (@DonDebonair)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyinfra
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.6
|
|
4
4
|
Summary: pyinfra automates/provisions/manages/deploys infrastructure.
|
|
5
5
|
Project-URL: homepage, https://pyinfra.com
|
|
6
6
|
Project-URL: documentation, https://docs.pyinfra.com
|
|
@@ -29,6 +29,7 @@ Requires-Dist: gevent>=1.5
|
|
|
29
29
|
Requires-Dist: jinja2<4,>3
|
|
30
30
|
Requires-Dist: packaging>=16.1
|
|
31
31
|
Requires-Dist: paramiko<4,>=2.7
|
|
32
|
+
Requires-Dist: pydantic<3,>=2.11
|
|
32
33
|
Requires-Dist: python-dateutil<3,>2
|
|
33
34
|
Requires-Dist: typeguard<5,>=4
|
|
34
35
|
Requires-Dist: typing-extensions; python_version < '3.11'
|
|
@@ -56,7 +56,7 @@ class MyConnector(BaseConnector):
|
|
|
56
56
|
@staticmethod
|
|
57
57
|
def make_names_data(_=None):
|
|
58
58
|
... # see above
|
|
59
|
-
|
|
59
|
+
|
|
60
60
|
def run_shell_command(
|
|
61
61
|
self,
|
|
62
62
|
command: StringCommand,
|
|
@@ -191,6 +191,60 @@ screen.
|
|
|
191
191
|
`disconnect` can be used after all operations complete to clean up any connection/s remaining to the hosts being managed.
|
|
192
192
|
|
|
193
193
|
|
|
194
|
+
## Implementing `run_shell_command`
|
|
195
|
+
|
|
196
|
+
When implementing `run_shell_command`, connectors should use pyinfra's command wrapping utilities rather than manually constructing commands. The `make_unix_command_for_host()` function from `pyinfra.connectors.util` handles shell wrapping, sudo elevation, environment variables, working directory changes, command retries and shell executable selection.
|
|
197
|
+
|
|
198
|
+
Its worth being aware that when passing `arguments` to `make_unix_command_for_host()`, connector control parameters must be filtered out. These parameters (`_success_exit_codes`, `_timeout`, `_get_pty`, `_stdin`) are defined in `pyinfra.api.arguments.ConnectorArguments` and are meant for the connector's internal logic after command generation, not for command construction itself.
|
|
199
|
+
|
|
200
|
+
The recommended approach is to use `extract_control_arguments()` from `pyinfra.connectors.util` which handles this filtering for you:
|
|
201
|
+
|
|
202
|
+
```py
|
|
203
|
+
from pyinfra.connectors.util import extract_control_arguments, make_unix_command_for_host
|
|
204
|
+
|
|
205
|
+
class MyConnector(BaseConnector):
|
|
206
|
+
handles_execution = True
|
|
207
|
+
|
|
208
|
+
def run_shell_command(
|
|
209
|
+
self,
|
|
210
|
+
command: StringCommand,
|
|
211
|
+
print_output: bool = False,
|
|
212
|
+
print_input: bool = False,
|
|
213
|
+
**arguments: Unpack["ConnectorArguments"],
|
|
214
|
+
) -> Tuple[bool, CommandOutput]:
|
|
215
|
+
"""Execute a command with proper shell wrapping."""
|
|
216
|
+
|
|
217
|
+
# Extract and remove control parameters from arguments
|
|
218
|
+
# This modifies arguments dict in place and returns the extracted params
|
|
219
|
+
control_args = extract_control_arguments(arguments)
|
|
220
|
+
|
|
221
|
+
# Generate properly wrapped command with sudo, environment, etc
|
|
222
|
+
# arguments now contains only command generation parameters
|
|
223
|
+
wrapped_command = make_unix_command_for_host(
|
|
224
|
+
self.state,
|
|
225
|
+
self.host,
|
|
226
|
+
command,
|
|
227
|
+
**arguments,
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
# Use control parameters for execution
|
|
231
|
+
timeout = control_args.get("_timeout")
|
|
232
|
+
success_exit_codes = control_args.get("_success_exit_codes", [0])
|
|
233
|
+
|
|
234
|
+
# Execute the wrapped command using your connector's method
|
|
235
|
+
exit_code, output = self._execute(wrapped_command, timeout=timeout)
|
|
236
|
+
|
|
237
|
+
# Check success based on exit codes
|
|
238
|
+
success = exit_code in success_exit_codes
|
|
239
|
+
|
|
240
|
+
return success, output
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Without proper command wrapping, shell operators and complex commands will fail. For example `timeout 60 bash -c 'command' || true` executed without shell wrapping will result in `bash: ||: command not found`. PyInfra operations and fact gathering rely on shell operators (`&&`, `||`, pipes, redirects) so using `make_unix_command_for_host()` ensures your connector handles these correctly.
|
|
244
|
+
|
|
245
|
+
For complete examples see pyinfra's built-in connectors in `pyinfra/connectors/docker.py`, `pyinfra/connectors/chroot.py`, `pyinfra/connectors/ssh.py` and `pyinfra/connectors/local.py`, as well as the command wrapping utilities in `pyinfra/connectors/util.py`.
|
|
246
|
+
|
|
247
|
+
|
|
194
248
|
## pyproject.toml
|
|
195
249
|
|
|
196
250
|
In order for pyinfra to gain knowledge about your connector, you need to add the following snippet to your connector's `pyproject.toml`:
|
|
@@ -3,7 +3,7 @@ Using the API
|
|
|
3
3
|
|
|
4
4
|
In addition to :doc:`the pyinfra CLI <../cli>`, pyinfra provides a full Python API. As of ``v3`` this API can be considered mostly stable. See the :doc:`./reference`.
|
|
5
5
|
|
|
6
|
-
You can also reference `pyinfra's own main.py <https://github.com/pyinfra-dev/pyinfra/blob/3.x/pyinfra_cli/main.py>`_, and the `pyinfra API source code <https://github.com/pyinfra-dev/pyinfra/tree/3.x/pyinfra/api>`_.
|
|
6
|
+
You can also reference `pyinfra's own main.py <https://github.com/pyinfra-dev/pyinfra/blob/3.x/src/pyinfra_cli/main.py>`_, and the `pyinfra API source code <https://github.com/pyinfra-dev/pyinfra/tree/3.x/src/pyinfra/api>`_.
|
|
7
7
|
|
|
8
8
|
Full Example
|
|
9
9
|
------------
|
|
@@ -77,7 +77,7 @@ pyinfra @local ...
|
|
|
77
77
|
pyinfra my-server.net,@local ...
|
|
78
78
|
|
|
79
79
|
# Execute against a Docker container
|
|
80
|
-
pyinfra @docker/
|
|
80
|
+
pyinfra @docker/fedora:43 ...
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
### Limit
|
|
@@ -132,7 +132,7 @@ For example, here we ensure that `nginx` is installed on the remote servers:
|
|
|
132
132
|
# Ubuntu example
|
|
133
133
|
pyinfra inventory.py apt.packages nginx update=true _sudo=true
|
|
134
134
|
|
|
135
|
-
#
|
|
135
|
+
# Fedora example
|
|
136
136
|
pyinfra inventory2.py yum.packages nginx _sudo=true
|
|
137
137
|
```
|
|
138
138
|
|
|
@@ -27,10 +27,9 @@ To debug pyinfra within PyCharm, you need to [explicitly enable support for Geve
|
|
|
27
27
|
pyinfra aims to be compatible with all Unix-like operating systems and is currently developed against:
|
|
28
28
|
|
|
29
29
|
+ Linux distros:
|
|
30
|
-
* Ubuntu
|
|
30
|
+
* Ubuntu 20/22/24
|
|
31
31
|
* Debian 9/10
|
|
32
|
-
*
|
|
33
|
-
* Fedora 33
|
|
32
|
+
* Fedora 43
|
|
34
33
|
* Alpine 3.8
|
|
35
34
|
+ BSD flavours:
|
|
36
35
|
* OpenBSD 6
|
|
@@ -5,6 +5,7 @@ from shutil import rmtree
|
|
|
5
5
|
import guzzle_sphinx_theme
|
|
6
6
|
|
|
7
7
|
from pyinfra import __version__, local
|
|
8
|
+
from pyinfra.api import metadata
|
|
8
9
|
|
|
9
10
|
copyright = "Nick Barrett {0} — pyinfra v{1}".format(
|
|
10
11
|
date.today().year,
|
|
@@ -57,9 +58,42 @@ exclude_patterns = [
|
|
|
57
58
|
]
|
|
58
59
|
|
|
59
60
|
|
|
61
|
+
def rstjinja(app, docname, source):
|
|
62
|
+
"""
|
|
63
|
+
Render certain pages as a jinja templates.
|
|
64
|
+
"""
|
|
65
|
+
# this should only be run when building html
|
|
66
|
+
if app.builder.format != "html":
|
|
67
|
+
return
|
|
68
|
+
# We currently only render docs/operations.rst
|
|
69
|
+
# and docs/facts.rst as jinja2 templates
|
|
70
|
+
if docname in ["operations", "facts"]:
|
|
71
|
+
src = source[0]
|
|
72
|
+
rendered = app.builder.templates.render_string(src, app.config.html_context)
|
|
73
|
+
source[0] = rendered
|
|
74
|
+
|
|
75
|
+
|
|
60
76
|
def setup(app):
|
|
77
|
+
app.connect("source-read", rstjinja)
|
|
61
78
|
this_dir = path.dirname(path.realpath(__file__))
|
|
62
79
|
scripts_dir = path.abspath(path.join(this_dir, "..", "scripts"))
|
|
80
|
+
metadata_file = path.abspath(path.join(this_dir, "..", "pyinfra-metadata.toml"))
|
|
81
|
+
if not path.exists(metadata_file):
|
|
82
|
+
raise ValueError("No pyinfra-metadata.toml in project root")
|
|
83
|
+
with open(metadata_file, "r") as file:
|
|
84
|
+
metadata_text = file.read()
|
|
85
|
+
plugins = metadata.parse_plugins(metadata_text)
|
|
86
|
+
|
|
87
|
+
operation_plugins = sorted([p for p in plugins if p.type == "operation"], key=lambda p: p.name)
|
|
88
|
+
fact_plugins = sorted([p for p in plugins if p.type == "fact"], key=lambda p: p.name)
|
|
89
|
+
html_context = {
|
|
90
|
+
"operation_plugins": operation_plugins,
|
|
91
|
+
"fact_plugins": fact_plugins,
|
|
92
|
+
"tags": metadata.ALLOWED_TAGS,
|
|
93
|
+
"docs_language": language,
|
|
94
|
+
"docs_version": version,
|
|
95
|
+
}
|
|
96
|
+
app.config.html_context = html_context
|
|
63
97
|
|
|
64
98
|
for auto_docs_name in ("operations", "facts", "apidoc", "connectors"):
|
|
65
99
|
auto_docs_path = path.join(this_dir, auto_docs_name)
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
Connectors Index
|
|
2
2
|
================
|
|
3
3
|
|
|
4
|
+
.. raw:: html
|
|
5
|
+
|
|
6
|
+
<nav class="under-title-tabs">
|
|
7
|
+
See also:
|
|
8
|
+
<a href="operations.html">Operations Index</a>
|
|
9
|
+
<a href="facts.html">Facts Index</a>
|
|
10
|
+
</nav>
|
|
11
|
+
|
|
4
12
|
Connectors enable pyinfra to integrate with other tools out of the box. Connectors can do one of three things:
|
|
5
13
|
|
|
6
14
|
+ Implement how commands are executed (``@ssh``, ``@local``)
|
|
@@ -35,7 +35,7 @@ uv sync
|
|
|
35
35
|
|
|
36
36
|
### Code Style & Type Checking
|
|
37
37
|
|
|
38
|
-
Code style is enforced via [ruff](https://docs.astral.sh/ruff/). Types are checked with mypy currently, and pyright is
|
|
38
|
+
Code style is enforced via [ruff](https://docs.astral.sh/ruff/). Types are checked with mypy currently, and pyright is
|
|
39
39
|
recommended for local development though currently optional. There is a script to run the linting & type-checking:
|
|
40
40
|
|
|
41
41
|
```sh
|
|
@@ -96,5 +96,5 @@ scripts/build-public-docs.sh
|
|
|
96
96
|
To view ([localhost:8000](http://localhost:8000)):
|
|
97
97
|
|
|
98
98
|
```sh
|
|
99
|
-
|
|
99
|
+
uv run -m http.server -d docs/public/en/latest/
|
|
100
100
|
```
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
Facts Index
|
|
2
|
+
===========
|
|
3
|
+
|
|
4
|
+
.. raw:: html
|
|
5
|
+
|
|
6
|
+
<nav class="under-title-tabs">
|
|
7
|
+
See also:
|
|
8
|
+
<a href="operations.html">Operations Index</a>
|
|
9
|
+
<a href="connectors.html">Connectors Index</a>
|
|
10
|
+
</nav>
|
|
11
|
+
|
|
12
|
+
pyinfra uses **facts** to determine the existing state of a remote server. Operations use this information to generate commands which alter the state. Facts are read-only and are populated at the beginning of the deploy.
|
|
13
|
+
|
|
14
|
+
Facts can be executed/tested via the command line:
|
|
15
|
+
|
|
16
|
+
.. code:: sh
|
|
17
|
+
|
|
18
|
+
# Example how to get multiple facts from a server myhost.com
|
|
19
|
+
pyinfra myhost.com fact server.Date server.Hostname ...
|
|
20
|
+
|
|
21
|
+
If you want to pass an argument to a fact, pass it with ``key=value``. For example:
|
|
22
|
+
|
|
23
|
+
.. code:: sh
|
|
24
|
+
|
|
25
|
+
# See if the package 'openssh-server' is installed servers myhost.com and myhost2.com
|
|
26
|
+
pyinfra myhost.com,myhost2.com fact deb.DebPackage name=openssh-server
|
|
27
|
+
|
|
28
|
+
Multiple facts with arguments may be called like so:
|
|
29
|
+
|
|
30
|
+
.. code:: sh
|
|
31
|
+
|
|
32
|
+
pyinfra @local fact files.File path=setup.py files.File path=anotherfile.txt
|
|
33
|
+
|
|
34
|
+
You can leverage facts within :doc:`operations <using-operations>` like this:
|
|
35
|
+
|
|
36
|
+
.. code:: py
|
|
37
|
+
|
|
38
|
+
from pyinfra import host
|
|
39
|
+
from pyinfra.facts.server import LinuxName
|
|
40
|
+
|
|
41
|
+
if host.get_fact(LinuxName) == 'Ubuntu':
|
|
42
|
+
apt.packages(...)
|
|
43
|
+
|
|
44
|
+
**Want a new fact?** Check out :doc:`the writing facts guide <./api/operations>`.
|
|
45
|
+
|
|
46
|
+
.. raw:: html
|
|
47
|
+
|
|
48
|
+
<div class="container my-4">
|
|
49
|
+
<!-- Dropdown Filter -->
|
|
50
|
+
<div class="mb-4">
|
|
51
|
+
<label for="tag-dropdown" class="form-label">Filter by Tag:</label>
|
|
52
|
+
<select class="form-select" id="tag-dropdown">
|
|
53
|
+
<option value="All">All</option>
|
|
54
|
+
{% for tag in tags %}
|
|
55
|
+
<option value="{{ tag.title_case }}">{{ tag.title_case }}</option>
|
|
56
|
+
{% endfor %}
|
|
57
|
+
</select>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<!-- Cards Grid -->
|
|
61
|
+
<div class="row" id="card-container">
|
|
62
|
+
{% for plugin in fact_plugins %}
|
|
63
|
+
<div class="col-md-4 mb-4 card-item">
|
|
64
|
+
<div class="card h-100">
|
|
65
|
+
<div class="card-body">
|
|
66
|
+
<h5 class="card-title">
|
|
67
|
+
<a href="./facts/{{ plugin.name }}.html">
|
|
68
|
+
{{ plugin.name }}
|
|
69
|
+
</a>
|
|
70
|
+
<p class="card-text">{{ plugin.description }}</p>
|
|
71
|
+
{% for tag in plugin.tags %}
|
|
72
|
+
<span class="badge bg-secondary">{{ tag.title_case }}</span>
|
|
73
|
+
{% endfor %}
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
{% endfor %}
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
<script>
|
|
81
|
+
document.getElementById('tag-dropdown').addEventListener('change', function () {
|
|
82
|
+
const selectedTag = this.value;
|
|
83
|
+
const cards = document.querySelectorAll('.card-item');
|
|
84
|
+
|
|
85
|
+
cards.forEach(card => {
|
|
86
|
+
const tags = Array.from(card.querySelectorAll('.badge')).map(badge => badge.textContent.trim());
|
|
87
|
+
|
|
88
|
+
if (selectedTag === 'All' || tags.includes(selectedTag)) {
|
|
89
|
+
card.style.display = 'block';
|
|
90
|
+
} else {
|
|
91
|
+
card.style.display = 'none';
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
</script>
|
|
96
|
+
|
|
97
|
+
.. toctree::
|
|
98
|
+
:maxdepth: 2
|
|
99
|
+
:glob:
|
|
100
|
+
:hidden:
|
|
101
|
+
|
|
102
|
+
facts/*
|
|
@@ -20,6 +20,7 @@ The currently executing host can be fetched from the ``host`` context variable.
|
|
|
20
20
|
# Get the actual current hostname from the host
|
|
21
21
|
from pyinfra.facts.server import Hostname
|
|
22
22
|
hostname = host.get_fact(Hostname)
|
|
23
|
+
print(f"hostname:{hostname}")
|
|
23
24
|
|
|
24
25
|
How do I use sudo in an operation?
|
|
25
26
|
----------------------------------
|
|
@@ -28,6 +29,7 @@ Sudo is controlled by one of the `privilege and user escalation arguments <argum
|
|
|
28
29
|
|
|
29
30
|
.. code:: python
|
|
30
31
|
|
|
32
|
+
from pyinfra.operations import apt
|
|
31
33
|
apt.packages(
|
|
32
34
|
packages=["iftop"],
|
|
33
35
|
_sudo=True,
|
|
@@ -43,6 +45,7 @@ Use the LINK ``files.file``, ``files.directory`` or ``files.link`` operations to
|
|
|
43
45
|
|
|
44
46
|
.. code:: python
|
|
45
47
|
|
|
48
|
+
from pyinfra.operations import files
|
|
46
49
|
files.file(
|
|
47
50
|
path="/etc/default/elasticsearch",
|
|
48
51
|
user="pyinfra",
|
|
@@ -57,6 +60,7 @@ Use the `retry behavior arguments <arguments.html#retry-behavior>`_ to automatic
|
|
|
57
60
|
|
|
58
61
|
.. code:: python
|
|
59
62
|
|
|
63
|
+
from pyinfra.operations import server
|
|
60
64
|
# Retry a network operation up to 3 times
|
|
61
65
|
server.shell(
|
|
62
66
|
name="Download file with retries",
|
|
@@ -29,8 +29,11 @@ You can start pyinfra immediately with some ad-hoc command execution. The CLI al
|
|
|
29
29
|
# Execute over SSH
|
|
30
30
|
pyinfra my-server.net exec -- echo "hello world"
|
|
31
31
|
|
|
32
|
+
# Execute over SSH with options
|
|
33
|
+
pyinfra localhost --ssh-port 2222 --ssh-user vagrant exec -- echo "hello world"
|
|
34
|
+
|
|
32
35
|
# Execute within a new docker container
|
|
33
|
-
pyinfra @docker/ubuntu:
|
|
36
|
+
pyinfra @docker/ubuntu:22.04 exec -- echo "hello world"
|
|
34
37
|
|
|
35
38
|
# Execute on the local machine (MacOS/Linux only - for now)
|
|
36
39
|
pyinfra @local exec -- echo "hello world"
|
|
@@ -66,8 +69,19 @@ To get started create an ``inventory.py`` containing our hosts to target:
|
|
|
66
69
|
|
|
67
70
|
.. code:: python
|
|
68
71
|
|
|
69
|
-
|
|
70
|
-
|
|
72
|
+
# Define a group as a list of hosts
|
|
73
|
+
my_hosts = [
|
|
74
|
+
# vagrant instance
|
|
75
|
+
("ubuntu2204", {
|
|
76
|
+
"ssh_port": 2222,
|
|
77
|
+
"ssh_hostname": "localhost",
|
|
78
|
+
"ssh_user": "vagrant",
|
|
79
|
+
"_sudo": True
|
|
80
|
+
}),
|
|
81
|
+
"my-server.net",
|
|
82
|
+
"@docker/ubuntu:22.04"
|
|
83
|
+
]
|
|
84
|
+
|
|
71
85
|
|
|
72
86
|
Now create a ``deploy.py`` containing our operations to execute:
|
|
73
87
|
|
|
@@ -79,7 +93,7 @@ Now create a ``deploy.py`` containing our operations to execute:
|
|
|
79
93
|
apt.packages(
|
|
80
94
|
name="Ensure the vim apt package is installed",
|
|
81
95
|
packages=["vim"],
|
|
82
|
-
|
|
96
|
+
update=True,
|
|
83
97
|
)
|
|
84
98
|
|
|
85
99
|
This can now be executed like this:
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
Operations Index
|
|
2
|
+
================
|
|
3
|
+
|
|
4
|
+
.. raw:: html
|
|
5
|
+
|
|
6
|
+
<nav class="under-title-tabs">
|
|
7
|
+
See also:
|
|
8
|
+
<a href="facts.html">Facts Index</a>
|
|
9
|
+
<a href="connectors.html">Connectors Index</a>
|
|
10
|
+
</nav>
|
|
11
|
+
|
|
12
|
+
Operations are used to describe changes to make to systems in the inventory. Use them to define state and pyinfra will make any necessary changes to reach that state. All operations accept a set of :doc:`global arguments <arguments>` and are grouped as Python modules.
|
|
13
|
+
|
|
14
|
+
**Want a new operation?** Check out :doc:`the writing operations guide <./api/operations>`.
|
|
15
|
+
|
|
16
|
+
.. raw:: html
|
|
17
|
+
|
|
18
|
+
<div class="container my-4">
|
|
19
|
+
<!-- Dropdown Filter -->
|
|
20
|
+
<div class="mb-4">
|
|
21
|
+
<label for="tag-dropdown" class="form-label">Filter by Tag:</label>
|
|
22
|
+
<select class="form-select" id="tag-dropdown">
|
|
23
|
+
<option value="All">All</option>
|
|
24
|
+
{% for tag in tags %}
|
|
25
|
+
<option value="{{ tag.title_case }}">{{ tag.title_case }}</option>
|
|
26
|
+
{% endfor %}
|
|
27
|
+
</select>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<!-- Cards Grid -->
|
|
31
|
+
<div class="row" id="card-container">
|
|
32
|
+
{% for plugin in operation_plugins %}
|
|
33
|
+
<div class="col-md-4 mb-4 card-item">
|
|
34
|
+
<div class="card h-100">
|
|
35
|
+
<div class="card-body">
|
|
36
|
+
<h5 class="card-title">
|
|
37
|
+
<a href="./operations/{{ plugin.name }}.html">
|
|
38
|
+
{{ plugin.name }}
|
|
39
|
+
</a>
|
|
40
|
+
</h5>
|
|
41
|
+
<p class="card-text">{{ plugin.description }}</p>
|
|
42
|
+
{% for tag in plugin.tags %}
|
|
43
|
+
<span class="badge bg-secondary">{{ tag.title_case }}</span>
|
|
44
|
+
{% endfor %}
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
{% endfor %}
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
<script>
|
|
52
|
+
document.getElementById('tag-dropdown').addEventListener('change', function () {
|
|
53
|
+
const selectedTag = this.value;
|
|
54
|
+
const cards = document.querySelectorAll('.card-item');
|
|
55
|
+
|
|
56
|
+
cards.forEach(card => {
|
|
57
|
+
const tags = Array.from(card.querySelectorAll('.badge')).map(badge => badge.textContent.trim());
|
|
58
|
+
|
|
59
|
+
if (selectedTag === 'All' || tags.includes(selectedTag)) {
|
|
60
|
+
card.style.display = 'block';
|
|
61
|
+
} else {
|
|
62
|
+
card.style.display = 'none';
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
</script>
|
|
67
|
+
|
|
68
|
+
.. toctree::
|
|
69
|
+
:maxdepth: 2
|
|
70
|
+
:glob:
|
|
71
|
+
:hidden:
|
|
72
|
+
|
|
73
|
+
operations/*
|