pyinfra 0.11.dev3__py3-none-any.whl → 3.5.1__py3-none-any.whl
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/__init__.py +9 -12
- pyinfra/__main__.py +4 -0
- pyinfra/api/__init__.py +18 -3
- pyinfra/api/arguments.py +406 -0
- pyinfra/api/arguments_typed.py +79 -0
- pyinfra/api/command.py +274 -0
- pyinfra/api/config.py +222 -28
- pyinfra/api/connect.py +33 -13
- pyinfra/api/connectors.py +27 -0
- pyinfra/api/deploy.py +65 -66
- pyinfra/api/exceptions.py +67 -18
- pyinfra/api/facts.py +253 -202
- pyinfra/api/host.py +413 -50
- pyinfra/api/inventory.py +121 -160
- pyinfra/api/operation.py +432 -262
- pyinfra/api/operations.py +273 -260
- pyinfra/api/state.py +302 -248
- pyinfra/api/util.py +291 -368
- pyinfra/connectors/base.py +173 -0
- pyinfra/connectors/chroot.py +212 -0
- pyinfra/connectors/docker.py +381 -0
- pyinfra/connectors/dockerssh.py +297 -0
- pyinfra/connectors/local.py +238 -0
- pyinfra/connectors/scp/__init__.py +1 -0
- pyinfra/connectors/scp/client.py +204 -0
- pyinfra/connectors/ssh.py +670 -0
- pyinfra/connectors/ssh_util.py +114 -0
- pyinfra/connectors/sshuserclient/client.py +309 -0
- pyinfra/connectors/sshuserclient/config.py +102 -0
- pyinfra/connectors/terraform.py +135 -0
- pyinfra/connectors/util.py +410 -0
- pyinfra/connectors/vagrant.py +183 -0
- pyinfra/context.py +145 -0
- pyinfra/facts/__init__.py +7 -6
- pyinfra/facts/apk.py +22 -7
- pyinfra/facts/apt.py +117 -60
- pyinfra/facts/brew.py +100 -15
- pyinfra/facts/bsdinit.py +23 -0
- pyinfra/facts/cargo.py +37 -0
- pyinfra/facts/choco.py +47 -0
- pyinfra/facts/crontab.py +195 -0
- pyinfra/facts/deb.py +94 -0
- pyinfra/facts/dnf.py +48 -0
- pyinfra/facts/docker.py +96 -23
- pyinfra/facts/efibootmgr.py +113 -0
- pyinfra/facts/files.py +630 -58
- pyinfra/facts/flatpak.py +77 -0
- pyinfra/facts/freebsd.py +70 -0
- pyinfra/facts/gem.py +19 -6
- pyinfra/facts/git.py +59 -14
- pyinfra/facts/gpg.py +150 -0
- pyinfra/facts/hardware.py +313 -167
- pyinfra/facts/iptables.py +72 -62
- pyinfra/facts/launchd.py +44 -0
- pyinfra/facts/lxd.py +17 -4
- pyinfra/facts/mysql.py +122 -86
- pyinfra/facts/npm.py +17 -9
- pyinfra/facts/openrc.py +71 -0
- pyinfra/facts/opkg.py +246 -0
- pyinfra/facts/pacman.py +50 -7
- pyinfra/facts/pip.py +24 -7
- pyinfra/facts/pipx.py +82 -0
- pyinfra/facts/pkg.py +15 -6
- pyinfra/facts/pkgin.py +35 -0
- pyinfra/facts/podman.py +54 -0
- pyinfra/facts/postgres.py +178 -0
- pyinfra/facts/postgresql.py +6 -147
- pyinfra/facts/rpm.py +105 -0
- pyinfra/facts/runit.py +77 -0
- pyinfra/facts/selinux.py +161 -0
- pyinfra/facts/server.py +746 -285
- pyinfra/facts/snap.py +88 -0
- pyinfra/facts/systemd.py +139 -0
- pyinfra/facts/sysvinit.py +59 -0
- pyinfra/facts/upstart.py +35 -0
- pyinfra/facts/util/__init__.py +17 -0
- pyinfra/facts/util/databases.py +4 -6
- pyinfra/facts/util/packaging.py +37 -6
- pyinfra/facts/util/units.py +30 -0
- pyinfra/facts/util/win_files.py +99 -0
- pyinfra/facts/vzctl.py +20 -13
- pyinfra/facts/xbps.py +35 -0
- pyinfra/facts/yum.py +34 -40
- pyinfra/facts/zfs.py +77 -0
- pyinfra/facts/zypper.py +42 -0
- pyinfra/local.py +45 -83
- pyinfra/operations/__init__.py +12 -0
- pyinfra/operations/apk.py +98 -0
- pyinfra/operations/apt.py +488 -0
- pyinfra/operations/brew.py +231 -0
- pyinfra/operations/bsdinit.py +59 -0
- pyinfra/operations/cargo.py +45 -0
- pyinfra/operations/choco.py +61 -0
- pyinfra/operations/crontab.py +191 -0
- pyinfra/operations/dnf.py +210 -0
- pyinfra/operations/docker.py +446 -0
- pyinfra/operations/files.py +1939 -0
- pyinfra/operations/flatpak.py +94 -0
- pyinfra/operations/freebsd/__init__.py +12 -0
- pyinfra/operations/freebsd/freebsd_update.py +70 -0
- pyinfra/operations/freebsd/pkg.py +219 -0
- pyinfra/operations/freebsd/service.py +116 -0
- pyinfra/operations/freebsd/sysrc.py +92 -0
- pyinfra/operations/gem.py +47 -0
- pyinfra/operations/git.py +419 -0
- pyinfra/operations/iptables.py +311 -0
- pyinfra/operations/launchd.py +45 -0
- pyinfra/operations/lxd.py +68 -0
- pyinfra/operations/mysql.py +609 -0
- pyinfra/operations/npm.py +57 -0
- pyinfra/operations/openrc.py +63 -0
- pyinfra/operations/opkg.py +88 -0
- pyinfra/operations/pacman.py +81 -0
- pyinfra/operations/pip.py +205 -0
- pyinfra/operations/pipx.py +102 -0
- pyinfra/operations/pkg.py +70 -0
- pyinfra/operations/pkgin.py +91 -0
- pyinfra/operations/postgres.py +436 -0
- pyinfra/operations/postgresql.py +30 -0
- pyinfra/operations/puppet.py +40 -0
- pyinfra/operations/python.py +72 -0
- pyinfra/operations/runit.py +184 -0
- pyinfra/operations/selinux.py +189 -0
- pyinfra/operations/server.py +1099 -0
- pyinfra/operations/snap.py +117 -0
- pyinfra/operations/ssh.py +216 -0
- pyinfra/operations/systemd.py +149 -0
- pyinfra/operations/sysvinit.py +141 -0
- pyinfra/operations/upstart.py +68 -0
- pyinfra/operations/util/__init__.py +12 -0
- pyinfra/operations/util/docker.py +251 -0
- pyinfra/operations/util/files.py +247 -0
- pyinfra/operations/util/packaging.py +336 -0
- pyinfra/operations/util/service.py +46 -0
- pyinfra/operations/vzctl.py +137 -0
- pyinfra/operations/xbps.py +77 -0
- pyinfra/operations/yum.py +210 -0
- pyinfra/operations/zfs.py +175 -0
- pyinfra/operations/zypper.py +192 -0
- pyinfra/progress.py +44 -32
- pyinfra/py.typed +0 -0
- pyinfra/version.py +9 -1
- pyinfra-3.5.1.dist-info/METADATA +141 -0
- pyinfra-3.5.1.dist-info/RECORD +159 -0
- {pyinfra-0.11.dev3.dist-info → pyinfra-3.5.1.dist-info}/WHEEL +1 -2
- pyinfra-3.5.1.dist-info/entry_points.txt +12 -0
- {pyinfra-0.11.dev3.dist-info → pyinfra-3.5.1.dist-info/licenses}/LICENSE.md +1 -1
- pyinfra_cli/__init__.py +1 -0
- pyinfra_cli/cli.py +780 -0
- pyinfra_cli/commands.py +66 -0
- pyinfra_cli/exceptions.py +155 -65
- pyinfra_cli/inventory.py +233 -89
- pyinfra_cli/log.py +39 -43
- pyinfra_cli/main.py +26 -495
- pyinfra_cli/prints.py +215 -156
- pyinfra_cli/util.py +172 -105
- pyinfra_cli/virtualenv.py +25 -20
- pyinfra/api/connectors/__init__.py +0 -21
- pyinfra/api/connectors/ansible.py +0 -99
- pyinfra/api/connectors/docker.py +0 -178
- pyinfra/api/connectors/local.py +0 -169
- pyinfra/api/connectors/ssh.py +0 -402
- pyinfra/api/connectors/sshuserclient/client.py +0 -105
- pyinfra/api/connectors/sshuserclient/config.py +0 -90
- pyinfra/api/connectors/util.py +0 -63
- pyinfra/api/connectors/vagrant.py +0 -155
- pyinfra/facts/init.py +0 -176
- pyinfra/facts/util/files.py +0 -102
- pyinfra/hook.py +0 -41
- pyinfra/modules/__init__.py +0 -11
- pyinfra/modules/apk.py +0 -64
- pyinfra/modules/apt.py +0 -272
- pyinfra/modules/brew.py +0 -122
- pyinfra/modules/files.py +0 -711
- pyinfra/modules/gem.py +0 -30
- pyinfra/modules/git.py +0 -115
- pyinfra/modules/init.py +0 -344
- pyinfra/modules/iptables.py +0 -271
- pyinfra/modules/lxd.py +0 -45
- pyinfra/modules/mysql.py +0 -347
- pyinfra/modules/npm.py +0 -47
- pyinfra/modules/pacman.py +0 -60
- pyinfra/modules/pip.py +0 -99
- pyinfra/modules/pkg.py +0 -43
- pyinfra/modules/postgresql.py +0 -245
- pyinfra/modules/puppet.py +0 -20
- pyinfra/modules/python.py +0 -37
- pyinfra/modules/server.py +0 -524
- pyinfra/modules/ssh.py +0 -150
- pyinfra/modules/util/files.py +0 -52
- pyinfra/modules/util/packaging.py +0 -118
- pyinfra/modules/vzctl.py +0 -133
- pyinfra/modules/yum.py +0 -171
- pyinfra/pseudo_modules.py +0 -64
- pyinfra-0.11.dev3.dist-info/.DS_Store +0 -0
- pyinfra-0.11.dev3.dist-info/METADATA +0 -135
- pyinfra-0.11.dev3.dist-info/RECORD +0 -95
- pyinfra-0.11.dev3.dist-info/entry_points.txt +0 -3
- pyinfra-0.11.dev3.dist-info/top_level.txt +0 -2
- pyinfra_cli/__main__.py +0 -40
- pyinfra_cli/config.py +0 -92
- /pyinfra/{modules/util → connectors}/__init__.py +0 -0
- /pyinfra/{api/connectors → connectors}/sshuserclient/__init__.py +0 -0
pyinfra/progress.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import math
|
|
2
2
|
import os
|
|
3
|
+
import platform
|
|
3
4
|
import sys
|
|
4
|
-
|
|
5
5
|
from collections import deque
|
|
6
6
|
from contextlib import contextmanager
|
|
7
7
|
from threading import Event, Thread
|
|
@@ -9,25 +9,32 @@ from time import sleep
|
|
|
9
9
|
|
|
10
10
|
import pyinfra
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
IS_WINDOWS = platform.system() == "Windows"
|
|
13
|
+
|
|
14
|
+
WAIT_TIME = 1 / 5
|
|
15
|
+
WAIT_CHARS = deque(("-", "/", "|", "\\"))
|
|
14
16
|
|
|
15
17
|
# Hacky way of getting terminal size (so can clear lines)
|
|
16
18
|
# Source: http://stackoverflow.com/questions/566746
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
)
|
|
19
|
+
IS_TTY = sys.stdout.isatty() and sys.stderr.isatty()
|
|
20
|
+
TERMINAL_WIDTH = 0
|
|
21
|
+
|
|
22
|
+
if IS_TTY:
|
|
23
|
+
try:
|
|
24
|
+
TERMINAL_WIDTH = os.get_terminal_size().columns
|
|
25
|
+
except AttributeError:
|
|
26
|
+
if not IS_WINDOWS:
|
|
27
|
+
terminal_size = os.popen("stty size", "r").read().split()
|
|
28
|
+
if len(terminal_size) == 2:
|
|
29
|
+
TERMINAL_WIDTH = int(terminal_size[1])
|
|
23
30
|
|
|
24
31
|
|
|
25
32
|
def _print_spinner(stop_event, progress_queue):
|
|
26
|
-
if not IS_TTY or os.environ.get(
|
|
33
|
+
if not IS_TTY or os.environ.get("PYINFRA_PROGRESS") == "off":
|
|
27
34
|
return
|
|
28
35
|
|
|
29
|
-
progress =
|
|
30
|
-
text =
|
|
36
|
+
progress = ""
|
|
37
|
+
text = ""
|
|
31
38
|
|
|
32
39
|
while True:
|
|
33
40
|
# Stop when asked too
|
|
@@ -41,26 +48,26 @@ def _print_spinner(stop_event, progress_queue):
|
|
|
41
48
|
except IndexError:
|
|
42
49
|
pass
|
|
43
50
|
|
|
44
|
-
text =
|
|
45
|
-
|
|
51
|
+
text = " {0}".format(
|
|
52
|
+
" ".join((WAIT_CHARS[0], progress)),
|
|
46
53
|
)
|
|
47
|
-
text =
|
|
54
|
+
text = "{0}\r".format(text)
|
|
48
55
|
|
|
49
|
-
sys.
|
|
50
|
-
sys.
|
|
56
|
+
sys.stderr.write(text)
|
|
57
|
+
sys.stderr.flush()
|
|
51
58
|
|
|
52
59
|
# In pyinfra_cli's __main__ we set stdout & stderr to be line buffered,
|
|
53
60
|
# so write this escape code (clear line) into the buffer but don't flush,
|
|
54
61
|
# such that any next print/log/etc clear the line first.
|
|
55
|
-
|
|
56
|
-
|
|
62
|
+
if not IS_WINDOWS:
|
|
63
|
+
sys.stderr.write("\033[K")
|
|
57
64
|
|
|
58
65
|
sleep(WAIT_TIME)
|
|
59
66
|
|
|
60
67
|
|
|
61
68
|
@contextmanager
|
|
62
69
|
def progress_spinner(items, prefix_message=None):
|
|
63
|
-
# If there's no
|
|
70
|
+
# If there's no current state context we're not in CLI mode, so just return a noop
|
|
64
71
|
# handler and exit.
|
|
65
72
|
if not pyinfra.is_cli:
|
|
66
73
|
yield lambda complete_item: None
|
|
@@ -80,11 +87,13 @@ def progress_spinner(items, prefix_message=None):
|
|
|
80
87
|
percentage_complete = 0
|
|
81
88
|
complete = total_items - len(items)
|
|
82
89
|
percentage_complete = int(math.floor(complete / total_items * 100))
|
|
83
|
-
message_bits.append(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
90
|
+
message_bits.append(
|
|
91
|
+
"{0}% ({1}/{2})".format(
|
|
92
|
+
percentage_complete,
|
|
93
|
+
complete,
|
|
94
|
+
total_items,
|
|
95
|
+
),
|
|
96
|
+
)
|
|
88
97
|
|
|
89
98
|
if prefix_message:
|
|
90
99
|
message_bits.append(prefix_message)
|
|
@@ -96,24 +105,27 @@ def progress_spinner(items, prefix_message=None):
|
|
|
96
105
|
items_allowed_width = TERMINAL_WIDTH - 10 - message_length
|
|
97
106
|
|
|
98
107
|
if items_allowed_width > 0:
|
|
99
|
-
items_string =
|
|
108
|
+
items_string = "{%s}" % (", ".join("{0}".format(i) for i in items))
|
|
100
109
|
if len(items_string) >= items_allowed_width:
|
|
101
|
-
items_string =
|
|
110
|
+
items_string = "%s...}" % (
|
|
102
111
|
# -3 for the ...
|
|
103
|
-
items_string[:items_allowed_width - 3],
|
|
112
|
+
items_string[: items_allowed_width - 3],
|
|
104
113
|
)
|
|
105
114
|
|
|
106
115
|
message_bits.append(items_string)
|
|
107
116
|
|
|
108
|
-
return
|
|
117
|
+
return " - ".join(message_bits)
|
|
109
118
|
|
|
110
119
|
progress_queue = deque((make_progress_message(),))
|
|
111
120
|
|
|
112
121
|
def progress(complete_item):
|
|
113
122
|
if complete_item not in items:
|
|
114
|
-
raise ValueError(
|
|
115
|
-
|
|
116
|
-
|
|
123
|
+
raise ValueError(
|
|
124
|
+
"Invalid complete item: {0} not in {1}".format(
|
|
125
|
+
complete_item,
|
|
126
|
+
items,
|
|
127
|
+
),
|
|
128
|
+
)
|
|
117
129
|
|
|
118
130
|
items.remove(complete_item)
|
|
119
131
|
progress_queue.append(make_progress_message())
|
pyinfra/py.typed
ADDED
|
File without changes
|
pyinfra/version.py
CHANGED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pyinfra
|
|
3
|
+
Version: 3.5.1
|
|
4
|
+
Summary: pyinfra automates/provisions/manages/deploys infrastructure.
|
|
5
|
+
Project-URL: homepage, https://pyinfra.com
|
|
6
|
+
Project-URL: documentation, https://docs.pyinfra.com
|
|
7
|
+
Project-URL: repository, https://github.com/pyinfra-dev/pyinfra
|
|
8
|
+
Author-email: Nick / Fizzadar <pointlessrambler@gmail.com>
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE.md
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Information Technology
|
|
15
|
+
Classifier: Intended Audience :: System Administrators
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: System :: Installation/Setup
|
|
23
|
+
Classifier: Topic :: System :: Systems Administration
|
|
24
|
+
Classifier: Topic :: Utilities
|
|
25
|
+
Requires-Python: <4.0,>=3.10
|
|
26
|
+
Requires-Dist: click>2
|
|
27
|
+
Requires-Dist: distro<2,>=1.6
|
|
28
|
+
Requires-Dist: gevent>=1.5
|
|
29
|
+
Requires-Dist: jinja2<4,>3
|
|
30
|
+
Requires-Dist: packaging>=16.1
|
|
31
|
+
Requires-Dist: paramiko<4,>=2.7
|
|
32
|
+
Requires-Dist: python-dateutil<3,>2
|
|
33
|
+
Requires-Dist: typeguard<5,>=4
|
|
34
|
+
Requires-Dist: typing-extensions; python_version < '3.11'
|
|
35
|
+
Description-Content-Type: text/markdown
|
|
36
|
+
|
|
37
|
+
<p align="center">
|
|
38
|
+
<a href="https://pyinfra.com">
|
|
39
|
+
<img src="https://pyinfra.com/static/logo_readme.png" alt="pyinfra" />
|
|
40
|
+
</a>
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<p>
|
|
44
|
+
pyinfra turns Python code into shell commands and runs them on your servers. Execute ad-hoc commands and write declarative operations. Target SSH servers, local machine and Docker containers. Fast and scales from one server to thousands. Think <code>ansible</code> but Python instead of YAML, and a lot faster.
|
|
45
|
+
</p>
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
<h3>
|
|
50
|
+
<a href="https://docs.pyinfra.com/page/getting-started.html"><strong>Getting Started</strong></a> •
|
|
51
|
+
<a href="https://github.com/pyinfra-dev/pyinfra-examples"><strong>Examples Repo</strong></a> •
|
|
52
|
+
<a href="https://matrix.to/#/#pyinfra:matrix.org"><strong>Chat on Matrix</strong></a>
|
|
53
|
+
</h3>
|
|
54
|
+
<p>
|
|
55
|
+
<a href="https://docs.pyinfra.com"><strong>Documentation</strong></a> •
|
|
56
|
+
<a href="https://docs.pyinfra.com/page/support.html"><strong>Help & Support</strong></a> •
|
|
57
|
+
<a href="https://docs.pyinfra.com/page/contributing.html"><strong>Contributing</strong></a>
|
|
58
|
+
</p>
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
Why pyinfra? Design features include:
|
|
63
|
+
|
|
64
|
+
+ 🚀 **Super fast** execution over thousands of hosts with predictable performance.
|
|
65
|
+
+ 🚨 **Instant debugging** with realtime stdin/stdout/stderr output (`-vvv`).
|
|
66
|
+
+ 🔄 **Idempotent operations** that enable diffs and dry runs before making changes.
|
|
67
|
+
+ 📦 **Extendable** with the entire Python package ecosystem.
|
|
68
|
+
+ 💻 **Agentless execution** against anything with shell access.
|
|
69
|
+
+ 🔌 **Integrated** with connectors for Docker, Terraform, Vagrant and more.
|
|
70
|
+
|
|
71
|
+
<img width="100%" src="https://pyinfra.com/static/example_deploy.gif" />
|
|
72
|
+
|
|
73
|
+
## Quickstart
|
|
74
|
+
|
|
75
|
+
Install pyinfra with [`uv`](https://docs.astral.sh/uv/):
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
uv tool install pyinfra
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Now you can execute commands on hosts via SSH:
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
pyinfra my-server.net exec -- echo "hello world"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Or target Docker containers, the local machine, and other [connectors](https://docs.pyinfra.com/page/connectors.html):
|
|
88
|
+
|
|
89
|
+
```sh
|
|
90
|
+
pyinfra @docker/ubuntu exec -- echo "Hello world"
|
|
91
|
+
pyinfra @local exec -- echo "Hello world"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
As well as executing commands you can define state using [operations](https://docs.pyinfra.com/page/operations.html):
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
# Install iftop apt package if not present
|
|
98
|
+
pyinfra @docker/ubuntu apt.packages iftop update=true _sudo=true
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Which can then be saved as a Python file like `deploy.py`:
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
```py
|
|
105
|
+
from pyinfra.operations import apt
|
|
106
|
+
|
|
107
|
+
apt.packages(
|
|
108
|
+
name="Ensure iftop is installed",
|
|
109
|
+
packages=['iftop'],
|
|
110
|
+
update=True,
|
|
111
|
+
_sudo=True,
|
|
112
|
+
)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
The hosts can also be saved in a file, for example `inventory.py`:
|
|
116
|
+
|
|
117
|
+
```py
|
|
118
|
+
targets = ["@docker/ubuntu", "my-test-server.net"]
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
And executed together:
|
|
123
|
+
|
|
124
|
+
```sh
|
|
125
|
+
pyinfra inventory.py deploy.py
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Now you know the building blocks of pyinfra! By combining inventory, operations and Python code you can deploy anything.
|
|
129
|
+
|
|
130
|
+
See the more detailed [getting started](https://docs.pyinfra.com/page/getting-started.html) or [using operations](https://docs.pyinfra.com/page/using-operations.html) guides. See how to use [inventory & data](https://docs.pyinfra.com/page/inventory-data.html), [global arguments](https://docs.pyinfra.com/page/arguments.html) and [the CLI](https://docs.pyinfra.com/page/cli.html) or check out the [documented examples](https://docs.pyinfra.com/page/examples.html).
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
<p align="center">
|
|
135
|
+
<a href="https://pypi.python.org/pypi/pyinfra"><img alt="PyPI version" src="https://img.shields.io/pypi/v/pyinfra?color=blue"></a>
|
|
136
|
+
<a href="https://pepy.tech/project/pyinfra"><img alt="PyPi downloads" src="https://pepy.tech/badge/pyinfra"></a>
|
|
137
|
+
<a href="https://docs.pyinfra.com"><img alt="Docs status" src="https://img.shields.io/github/actions/workflow/status/Fizzadar/pyinfra/docs.yml?branch=2.x"></a>
|
|
138
|
+
<a href="https://github.com/Fizzadar/pyinfra/actions?query=workflow%3A%22Execute+tests%22"><img alt="Execute tests status" src="https://img.shields.io/github/actions/workflow/status/Fizzadar/pyinfra/test.yml?branch=2.x"></a>
|
|
139
|
+
<a href="https://codecov.io/github/Fizzadar/pyinfra"><img alt="Codecov Coverage" src="https://img.shields.io/codecov/c/gh/Fizzadar/pyinfra"></a>
|
|
140
|
+
<a href="https://github.com/Fizzadar/pyinfra/blob/2.x/LICENSE.md"><img alt="MIT Licensed" src="https://img.shields.io/pypi/l/pyinfra"></a>
|
|
141
|
+
</p>
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
pyinfra/__init__.py,sha256=7ZcKHGWk7_nYxsYrbFBB_vJr-J-Ddbc56ZS4sk5ArVw,535
|
|
2
|
+
pyinfra/__main__.py,sha256=oU4qYOZym9MdaoE83ER_0--L48FkMm6L7lM_pQVYbq4,73
|
|
3
|
+
pyinfra/context.py,sha256=HyJCarfQmbrdJ9Re_CNuzMwnfwINB3UFNz3chGatAdQ,3828
|
|
4
|
+
pyinfra/local.py,sha256=wT84xkJc9UBN5isvIVbNpm2fzZaadwE-dkbAwaFQdZk,2808
|
|
5
|
+
pyinfra/progress.py,sha256=X3hXZ4Flh_L9FE4ZEWxWoG0R4dA5UPd1FCO-Exd5Xtc,4193
|
|
6
|
+
pyinfra/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
pyinfra/version.py,sha256=LZf50PHDzEZv65w0G-iMICoQ9US0U5LWHAOEmNtkF3I,216
|
|
8
|
+
pyinfra/api/__init__.py,sha256=suGbKKM-qCduuXFYBEcyswlTqozewtYpdLRhK63PVn0,942
|
|
9
|
+
pyinfra/api/arguments.py,sha256=pxfizvECzEahbIyPfmVnk9FsQFnOnDIFPhBZvFLEhFg,12231
|
|
10
|
+
pyinfra/api/arguments_typed.py,sha256=IZuhpmDfW9CP6ASS5Ie-3Wcnxl6bDNR3egU4Mfhbsb4,2303
|
|
11
|
+
pyinfra/api/command.py,sha256=NwF2syxV3zxCbBdHzvJ6ve5G-xwdNTjPHFPwguKVcYs,7741
|
|
12
|
+
pyinfra/api/config.py,sha256=gVDV-aGh6LYOnHtBaivICrd3RBfjFRWy3-K9sG__eP8,9321
|
|
13
|
+
pyinfra/api/connect.py,sha256=jkx07iUL29u9pHHKH4WcNtvxwOA4DIbF7ixguFyuFjo,1984
|
|
14
|
+
pyinfra/api/connectors.py,sha256=nie7JuLxMSC6gqPjmjuCisQ11R-eAQDtMMWF6YbSQ48,659
|
|
15
|
+
pyinfra/api/deploy.py,sha256=Upd92oThQN0zhKbKW8vyPvBuoYiEGStuiEy7kNhZ00Y,3167
|
|
16
|
+
pyinfra/api/exceptions.py,sha256=cCbUp1qN1QO0d9aAvOAbRgYpLi0vUI5j7ZqSjcD1_P8,1861
|
|
17
|
+
pyinfra/api/facts.py,sha256=nybuKLncxHrJ7rHT2JH0Bg7YwHjQWb-fc8ABJ1J9Y4I,9278
|
|
18
|
+
pyinfra/api/host.py,sha256=4a1bFR8vX8mUuXRZttXlzp2_ARzrg-xsH7n8uOxaaqQ,14098
|
|
19
|
+
pyinfra/api/inventory.py,sha256=i_LBI-Gn5FF-9SVDBH6xefTtvFzjuz12QQiFPGK2TrQ,7864
|
|
20
|
+
pyinfra/api/operation.py,sha256=WtZyVwPoh9_AytqcCf_W6sMHhWEfSex9RE54aMBHU5M,17053
|
|
21
|
+
pyinfra/api/operations.py,sha256=MedR-5W4BF23p_FMI7o62K72pgE7G1z2scKeC-b3JF0,13677
|
|
22
|
+
pyinfra/api/state.py,sha256=cj-JvxOljeDshWvRpq8AMQxdGaUaht8KyuyR3mEsI-Y,12859
|
|
23
|
+
pyinfra/api/util.py,sha256=N13IPSConC5XhJCDtBB5s-PC39B-PPWaujrzY3Pm2a0,12837
|
|
24
|
+
pyinfra/connectors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
+
pyinfra/connectors/base.py,sha256=0-BKInwTpjbnTakJhMTn_8LUOl81vUmC-q-HzVrwhkw,4703
|
|
26
|
+
pyinfra/connectors/chroot.py,sha256=dBgruen5vS4j-OEFwF6ew-LPBR4kJEIQw_W5nXqlvVg,6064
|
|
27
|
+
pyinfra/connectors/docker.py,sha256=QweBHSE5pRP5UuRp97xIDwr_tduBf88JHpSmgwU5SpM,11930
|
|
28
|
+
pyinfra/connectors/dockerssh.py,sha256=NGG6hSZ3z66RRKt6T0hnG2jiXFLR4P5uudi1COcGnY0,9021
|
|
29
|
+
pyinfra/connectors/local.py,sha256=DJMmZiPgeYvZyW0ANvWjCxF3elmDlmolkY0ktTW3rcg,6990
|
|
30
|
+
pyinfra/connectors/ssh.py,sha256=qAr_4To6llbj_lW2uVztzNj_aSWP_i-2iAjNN70Wf2E,22572
|
|
31
|
+
pyinfra/connectors/ssh_util.py,sha256=CN_5AdTA3RpiWCnXTrRBjez1NsN59hITDzQmXIkZvoE,3683
|
|
32
|
+
pyinfra/connectors/terraform.py,sha256=j-a2yStBLdw1QLZRVnl_9TanDtdyujyCxBO2Oa00rPM,4289
|
|
33
|
+
pyinfra/connectors/util.py,sha256=-Ei6FMIzbVHD7G1R834Tg7RLoNzo-62wUYIkj043MRQ,11780
|
|
34
|
+
pyinfra/connectors/vagrant.py,sha256=0TT73ks64I4Yl-JSZjMBbpWA3VYBkqqLB-fUS8pS8GY,4813
|
|
35
|
+
pyinfra/connectors/scp/__init__.py,sha256=jnO-_8GfkKWhsFcDjAxjOkuUT2RbS22b8P_xPrX889U,44
|
|
36
|
+
pyinfra/connectors/scp/client.py,sha256=l_fPsbgz-7U6Y50ssuKKPFxD_cFoIPtaVXMCYDotbDI,6399
|
|
37
|
+
pyinfra/connectors/sshuserclient/__init__.py,sha256=Qc4RO2wknSWIiNTwOeQ0y2TeiuKHmyWDW2Dz4MOo9CE,44
|
|
38
|
+
pyinfra/connectors/sshuserclient/client.py,sha256=Ei2_mzCMNJopbpvpeLsdSiNb98rxEEy7uCOmpJbfd2o,10506
|
|
39
|
+
pyinfra/connectors/sshuserclient/config.py,sha256=FZkPrUYXkURZcFUHBGWw9lLC9uiH3DJ0rBYXJePchxw,2774
|
|
40
|
+
pyinfra/facts/__init__.py,sha256=myTXSOZmAqmU88Fyifn035h9Lr6Gj2mlka_jDcXyKGw,347
|
|
41
|
+
pyinfra/facts/apk.py,sha256=UEMHzhx2Wx3qq-OcjetWgE2iZ7_EjI-bszLxSN6PJa0,799
|
|
42
|
+
pyinfra/facts/apt.py,sha256=RYPqGgdH0QpDIoMNhBY9nKtMu-baQNX4DIYNrsllcLQ,4026
|
|
43
|
+
pyinfra/facts/brew.py,sha256=nE6YVc2S9zasyJPZmPR5FMeGKPViZYEcpnnBQlDf1EU,2792
|
|
44
|
+
pyinfra/facts/bsdinit.py,sha256=SVY4hagjyy1yz8FKWhIbX9fHm5AugvTFl4xQh2FFO74,631
|
|
45
|
+
pyinfra/facts/cargo.py,sha256=qgOClhwZm4COcncDzOZccCzs67nPBi_x6VGiF2UA0sA,687
|
|
46
|
+
pyinfra/facts/choco.py,sha256=mpLleSqNqiaGRgyrhgceno2iPB1_1yjn8UJ90pvOZCs,886
|
|
47
|
+
pyinfra/facts/crontab.py,sha256=yCpBzBqgXt2BjAGCIttuQ2xKKtuhzg0VQ9WCDV46eV8,5754
|
|
48
|
+
pyinfra/facts/deb.py,sha256=1dR1puwY5wyyhhYYwaEBLjKU9sIyaNBNBlamVZ2KQg0,2074
|
|
49
|
+
pyinfra/facts/dnf.py,sha256=wXatfZWVrrdLY7LM-vHKMg8Md1FiwkqHxmgRYbQqw90,1208
|
|
50
|
+
pyinfra/facts/docker.py,sha256=fqIqMR6HwSYpTUAjhCX8Hk57pcyL6ShIl98H32Ly6HM,3233
|
|
51
|
+
pyinfra/facts/efibootmgr.py,sha256=JPJSokE_RV9JstEPJRECnqSU-B0JCxmrocY8zBOva7M,3555
|
|
52
|
+
pyinfra/facts/files.py,sha256=rZi7e6E3oq5XBzkh375ztHya5fHusrTbU7B3rZDbHrQ,19501
|
|
53
|
+
pyinfra/facts/flatpak.py,sha256=ovi3duwTqqwvt5GoDRN7R-PpkvR6sQ1SmgEADcSnkUE,1646
|
|
54
|
+
pyinfra/facts/freebsd.py,sha256=za42Di2M2-hcSTPei1YE6BsJxqapm9jysshs9hKJZaY,2161
|
|
55
|
+
pyinfra/facts/gem.py,sha256=aX2-vcEqkxUIP0UJ_SVp9bf4B944oyDjsuujjs5q_9w,654
|
|
56
|
+
pyinfra/facts/git.py,sha256=Zfzpdccsz2InviirJO17EkEFTVNqYQclSlXJIRFkD_s,1699
|
|
57
|
+
pyinfra/facts/gpg.py,sha256=8fvC9AglzmO08SAT_Py6H6G0i73soO1D2cSCbw-O9JA,3923
|
|
58
|
+
pyinfra/facts/hardware.py,sha256=mta8hXPTlJ5j_5IdrXUfsDZAo4_89QjInuiT7DIxRYQ,12219
|
|
59
|
+
pyinfra/facts/iptables.py,sha256=ORRExNnPR5ysymDbkUjeQWt9mzjSI7su4uQfsu3FlJQ,3506
|
|
60
|
+
pyinfra/facts/launchd.py,sha256=Nl4EFbGwlXTj8GNWlS9UMZODHr63bve73xmMeqyf2gc,849
|
|
61
|
+
pyinfra/facts/lxd.py,sha256=A2LQN5armY_nI6gV-m1j4l2J2_mMZnvVa1X2RntDnDk,548
|
|
62
|
+
pyinfra/facts/mysql.py,sha256=ZVN6eN0Xetidvq_RAntSCzHgy4jmf8Enrm2mPXxO488,6247
|
|
63
|
+
pyinfra/facts/npm.py,sha256=WzZHCfgWwY9WsPPzL0njlazwiBHI0gpvyZV93Nfu428,838
|
|
64
|
+
pyinfra/facts/openrc.py,sha256=wB4fjzgWCgX6wexBm4jlWv4YH6b4z5_tAqQAO1qO9Kg,1614
|
|
65
|
+
pyinfra/facts/opkg.py,sha256=yTPuzoUyDDn-o7H97lPtyPe-FOkYg5zqkVmfKt9HwY4,7404
|
|
66
|
+
pyinfra/facts/pacman.py,sha256=SPI3jpzZbq_VnJ0z5q7A2Rw___EHVntOz6M19ErGpmQ,1324
|
|
67
|
+
pyinfra/facts/pip.py,sha256=MA2yed2_kVzLNjCulnCJEz4GeQ5dbGVtaAv4Bqm9fLw,820
|
|
68
|
+
pyinfra/facts/pipx.py,sha256=3-oP0yHWvi__RGRlgkQzRKQBMwZN3Ke9A-z8oYB5upM,1854
|
|
69
|
+
pyinfra/facts/pkg.py,sha256=4qcp0iO3TgWL9zvPCXcZDCRwrbWg65Wg8H0OvWqNqJk,588
|
|
70
|
+
pyinfra/facts/pkgin.py,sha256=ErtNMLn-Si6_nA69V1x_dZOX_Y_z5CkkevctXq0Nj-w,662
|
|
71
|
+
pyinfra/facts/podman.py,sha256=ONDyCaWe3k_BLO8ec0_KLHxrVgpUKLpKhuJ2bdrEuuo,1201
|
|
72
|
+
pyinfra/facts/postgres.py,sha256=TPcrYc9IhVFNW_rltc1oFUk4nfF0iWlS4gZMv0w7pXM,4499
|
|
73
|
+
pyinfra/facts/postgresql.py,sha256=4nusMVvGhtku86KX4O4vjSxh_MamxZy_kmTQvvy0GhE,223
|
|
74
|
+
pyinfra/facts/rpm.py,sha256=ikuKYiUmjgvPA84qfE-gbq4Iv4AB5cvor1uKU6uHbXQ,2391
|
|
75
|
+
pyinfra/facts/runit.py,sha256=qok1FTSshiNrN603vjYTKOeM-NIlxwLbwOp-vPbPySo,2131
|
|
76
|
+
pyinfra/facts/selinux.py,sha256=umVGK_6Iuj4Xbw5vhhbpxdUA4Mzg2Fhy7QmaNflNrp8,4650
|
|
77
|
+
pyinfra/facts/server.py,sha256=uafB7XYNT2eJB21XxNip_WrSyaRqe7uzFab5K4DCZqo,23446
|
|
78
|
+
pyinfra/facts/snap.py,sha256=2-c3z1qpOG7prmKJssLpOXmKo_wwdfROryro6gif2vo,2137
|
|
79
|
+
pyinfra/facts/systemd.py,sha256=meHXURtnoxeJbmPzWFTwvhjQBZ2NlQCY8Tj-oHTG_dI,4320
|
|
80
|
+
pyinfra/facts/sysvinit.py,sha256=q1OpHATFJxjLwatcnYRfpTR7_K2c29b4ppmZu-wgC-4,1589
|
|
81
|
+
pyinfra/facts/upstart.py,sha256=GcreN0mIM6_qRgqzFaA7PnX45RtbBpvVC00J6bKujyA,717
|
|
82
|
+
pyinfra/facts/vzctl.py,sha256=lUacmyakn2sJ2tD2FDAh1eeX3sxEVq7aRRwWM4QTguQ,760
|
|
83
|
+
pyinfra/facts/xbps.py,sha256=pNpgeITdHoJWhnJ_XFjySJ7H35d9h_v2F7GKqIrxgt0,663
|
|
84
|
+
pyinfra/facts/yum.py,sha256=KM0ogmT2JPPuSZKV7HaUFxIA1IXhcXRmykRk9wloKag,1169
|
|
85
|
+
pyinfra/facts/zfs.py,sha256=4cWfTu2_V3Rkku8LfWzwruP_Tu4gJV2ZOrtW3otbP2w,1805
|
|
86
|
+
pyinfra/facts/zypper.py,sha256=OQ8VXA-aRpsleiXVaRotjOewSOknux_VQ1Xv3qlfy7k,958
|
|
87
|
+
pyinfra/facts/util/__init__.py,sha256=FNqUZjHPzJplb6ctHdZCVvmxAeVDQfFYmghC6B5edWQ,573
|
|
88
|
+
pyinfra/facts/util/databases.py,sha256=EphGQApzRBXI2nG1FL9h8bozY-o4SgdQgpv9YcnCkxs,730
|
|
89
|
+
pyinfra/facts/util/packaging.py,sha256=Bo7QxYO0Eyj4_i8G27aOWUD_Rfw741RhkEBm3dF5OMI,1229
|
|
90
|
+
pyinfra/facts/util/units.py,sha256=SNHCisxGwZedCOqO9tfOWJpZ5Stc0Wcg9mZcXoKBY0A,714
|
|
91
|
+
pyinfra/facts/util/win_files.py,sha256=S_IQ5kJD6ZgkEcVHajgh7BIMolLV-1q1ghIcwAS-E1Q,2561
|
|
92
|
+
pyinfra/operations/__init__.py,sha256=SOcW337KXIzD_LH-iJJfq14BQcCs5JzwswJ0PIzDgF4,357
|
|
93
|
+
pyinfra/operations/apk.py,sha256=_0vOjbSiGx6EWv9rvTmQdGnRZQ_NA_Dyd3QW1cTzFgI,2111
|
|
94
|
+
pyinfra/operations/apt.py,sha256=w8rb8_yH4gKrdhDLKfWcziC5XQRXfhcGqNUwVcqrXpk,14352
|
|
95
|
+
pyinfra/operations/brew.py,sha256=aghLE4qyuhhRbt6fgSPV6_5fyWgTohA77Dc0gol19UU,5155
|
|
96
|
+
pyinfra/operations/bsdinit.py,sha256=okQUQDr2H8Z-cAdfdbPJiuGujsHLuV5gpuMZ1UlICEM,1648
|
|
97
|
+
pyinfra/operations/cargo.py,sha256=mXWd6pb0IR6kzJMmPHwXZN-VJ-B_y8AdOFlrRzDQOZI,1104
|
|
98
|
+
pyinfra/operations/choco.py,sha256=nIj4bWhChOd5DkybpbD-oupaoODgS7lYx6Vrou5ksuc,1547
|
|
99
|
+
pyinfra/operations/crontab.py,sha256=4jxNsgmJED7w9w2Rq6Irsa4wMXxH_yPDIjkFlcpXj7E,6552
|
|
100
|
+
pyinfra/operations/dnf.py,sha256=3154Rer6dejVB1AK-CqyJhpMVn_djaSDJrVMs62GNcE,5599
|
|
101
|
+
pyinfra/operations/docker.py,sha256=p8sG4BpcxSZwzKj4ystVgKmxmaF4GgDlnyJw1LeIsY4,12271
|
|
102
|
+
pyinfra/operations/files.py,sha256=E4SQTZZSIihXUWuzp7a3zBp_5gy_Agx9Ag45zrh6pgs,65686
|
|
103
|
+
pyinfra/operations/flatpak.py,sha256=QEJpzSXLyMQFk1XPAPHAfJVWcYWHnKA-tQr2hX6sB9o,2319
|
|
104
|
+
pyinfra/operations/gem.py,sha256=2C85sOwIRMHGvmPg4uAlUVf6MokhiA7LLPqzdJRHsBg,1132
|
|
105
|
+
pyinfra/operations/git.py,sha256=BqYQbG1VRw_XPtagbZHXitzss-U_LNGXRTwHE7L8P6M,13244
|
|
106
|
+
pyinfra/operations/iptables.py,sha256=EVav144bK25F5KQcSivBWqIdffdskTcMcUuWaSK1RRE,9338
|
|
107
|
+
pyinfra/operations/launchd.py,sha256=6HWvqoQ74idV_NStOEmFXwu0dmTv7YDvFtsK8An2Lu4,1177
|
|
108
|
+
pyinfra/operations/lxd.py,sha256=bKm9gsgZaruKYSL7OYFMiou-wGP4BzwIMWzjW4AZYrk,1742
|
|
109
|
+
pyinfra/operations/mysql.py,sha256=mmTb8es8OQ9FB7dHpeD1aB3Px9p9Fp3WQEwMkWZ0-R4,19851
|
|
110
|
+
pyinfra/operations/npm.py,sha256=bUmfQsClZ2YcHiihiC7k5widIXIi6lbfx_32iyaAKfo,1499
|
|
111
|
+
pyinfra/operations/openrc.py,sha256=AThQQO7u_pO0M-rQbxkX7EWDuR569smkoPVaQoRoFeE,1834
|
|
112
|
+
pyinfra/operations/opkg.py,sha256=xBdmU07MWr-YBKX0EV0GuVrwMy6MOOf7wzYvD42sF_I,2607
|
|
113
|
+
pyinfra/operations/pacman.py,sha256=QMjmsBiiw362nhZY0rEDVQL5A32MG3u7GcmX4q4PzfI,1702
|
|
114
|
+
pyinfra/operations/pip.py,sha256=Gh1vmrkCNktYXO8bh0IMEqjqhV07J8FYJcLHETZhjcQ,5995
|
|
115
|
+
pyinfra/operations/pipx.py,sha256=05AUm3nkkCfoxl0o4V5o9P_qb__0Yfv495dTBq7zkE4,2800
|
|
116
|
+
pyinfra/operations/pkg.py,sha256=rORQBbKeb-6gS0LYu0a0VdiWcDZoovcUONCaf6KMdeQ,2298
|
|
117
|
+
pyinfra/operations/pkgin.py,sha256=zhUyGzKjnUfGoyHbMoYMbeeMzcsiOUpBz1zIzppigJ0,1992
|
|
118
|
+
pyinfra/operations/postgres.py,sha256=hD65hRb8s3h6zlG-9WwT4JsNEXuxJUCY8ZRX61qlvlI,13367
|
|
119
|
+
pyinfra/operations/postgresql.py,sha256=agZjL2W4yxigk9ThIC0V_3wvmcWVdX308aJO24WkN6g,833
|
|
120
|
+
pyinfra/operations/puppet.py,sha256=eDe8D9jQbHYQ4_r4-dmEZfMASKQvj36BR8z_h8aDfw8,861
|
|
121
|
+
pyinfra/operations/python.py,sha256=u569cdPrPesrmzU09nwIPA3bk6TZ-Qv2QP0lJLcO_bw,2021
|
|
122
|
+
pyinfra/operations/runit.py,sha256=-K0GhORE56J4Gjh7PCriSx9zZI7XJV-cIb-LnnSuKdY,5162
|
|
123
|
+
pyinfra/operations/selinux.py,sha256=imZ4dbY4tl0GpBSkUgV983jbDDihWNs_OQkOBulT7FQ,5948
|
|
124
|
+
pyinfra/operations/server.py,sha256=HsnNBZtjXq_SPIDacs1owzXbODBZya1idk5Cpp-32kc,31245
|
|
125
|
+
pyinfra/operations/snap.py,sha256=a-QtNE4Dlsavqq425TUIwpEJu4oGw8UlLRkdTFyT1F8,3049
|
|
126
|
+
pyinfra/operations/ssh.py,sha256=wocoaYDlOhhItItAVQCEfnVowTtkg3AP0hQ3mnpUnl0,5634
|
|
127
|
+
pyinfra/operations/systemd.py,sha256=hPHTjASj6N_fRAzLr3DNHnxxIbiiTIIT9UStSxKDkTk,3984
|
|
128
|
+
pyinfra/operations/sysvinit.py,sha256=WzzthkmWL46MNNY6LsBZ90e37yPj0w2QyUtEAlGBwqY,4078
|
|
129
|
+
pyinfra/operations/upstart.py,sha256=pHb9RGnVhT14A_y6OezfOH-lmniKpiyJqpeoOJl0beE,1978
|
|
130
|
+
pyinfra/operations/vzctl.py,sha256=2u2CDkuDjzHBRQ54HfyfLpLrsbT8U7_05EEjbbhKUiU,3110
|
|
131
|
+
pyinfra/operations/xbps.py,sha256=ru3_srMBUyUXGzAsPo7WwoomfM0AeDglFv8CDqB33B0,1508
|
|
132
|
+
pyinfra/operations/yum.py,sha256=Ig7AzQy1C7I8XM37lWbw0nI5lzFGMoX30P8FV8-V5uA,5600
|
|
133
|
+
pyinfra/operations/zfs.py,sha256=FnhiXreqf5qJBusC31dwrQsEi0MvH4qxzjBayHKFcYY,5283
|
|
134
|
+
pyinfra/operations/zypper.py,sha256=z1CWv2uwWBlCLIhHna7U5DojVoKZYoUYpezJ_FM_xK8,5555
|
|
135
|
+
pyinfra/operations/freebsd/__init__.py,sha256=PXsCLQG29VhimYw4uwwB2FcDt6CrofOtD3LTHC-ik-8,362
|
|
136
|
+
pyinfra/operations/freebsd/freebsd_update.py,sha256=lH0wB_i6DkaXQnDPjsDq8ocO1hYHL0v_a1go4exYcR8,1864
|
|
137
|
+
pyinfra/operations/freebsd/pkg.py,sha256=3AyfI0-_9F4ho47KqZsOMQocwNtTF2q9g0i6TffJVak,4413
|
|
138
|
+
pyinfra/operations/freebsd/service.py,sha256=1f7nTHELnhs3HBSrMFsmopVgYFMIwB8Se88yneRQ8Rw,3198
|
|
139
|
+
pyinfra/operations/freebsd/sysrc.py,sha256=eg7u_JsCge_uKq3Ysc_mohUc6qgJrOZStp_B_l2Hav4,2330
|
|
140
|
+
pyinfra/operations/util/__init__.py,sha256=ZAHjeCXtLo0TIOSfZ9h0Sh5IXXRCspfHs3RR1l8tQCE,366
|
|
141
|
+
pyinfra/operations/util/docker.py,sha256=F7YmWIRSDyFaosf9q81nnwHhhIG7ktXOkM4VVOiUXTs,6931
|
|
142
|
+
pyinfra/operations/util/files.py,sha256=PFJDccNTwXK4tIoFB8ycRj7yD1x7LpSflBy7mPQtJCg,7148
|
|
143
|
+
pyinfra/operations/util/packaging.py,sha256=s5lP7lRORirQVDwGRARAatUZvz5lv_WpSSP-qq__2JQ,12034
|
|
144
|
+
pyinfra/operations/util/service.py,sha256=kJd1zj4-sAaGIp5Ts7yAJznogWaGr8oQTztwenLAr7Y,1309
|
|
145
|
+
pyinfra_cli/__init__.py,sha256=G0X7tNdqT45uWuK3aHIKxMdDeCgJ7zHo6vbxoG6zy_8,284
|
|
146
|
+
pyinfra_cli/cli.py,sha256=Bpt-mRNmvz0sNNhMAO5J3m0Kg-6M8tkJNMGY4C01ARc,20938
|
|
147
|
+
pyinfra_cli/commands.py,sha256=J-mCJYvDebJ8M7o3HreB2zToa871-xO6_KjVhPLeHho,1832
|
|
148
|
+
pyinfra_cli/exceptions.py,sha256=RRaOprL7SmVv--FLy4x7fxeTitx9wYI0Y3_h01LfhJA,4901
|
|
149
|
+
pyinfra_cli/inventory.py,sha256=JYSixJZKY8GNWlOxh-nGDsAknCdaAktlWAmdg13kvNk,11771
|
|
150
|
+
pyinfra_cli/log.py,sha256=mD96MH2owQQ5AsYRw7osCKENdp-E3Wum5IDr6qhSIa4,2268
|
|
151
|
+
pyinfra_cli/main.py,sha256=1CR3IS-O6BkAzkn7UW6pdKktTmN4Qnt0_jPdkhueRM8,936
|
|
152
|
+
pyinfra_cli/prints.py,sha256=1h6vgKVRKUxcGz_HdyEEDUvkp-lgiiVGwx3hc9rw24A,10434
|
|
153
|
+
pyinfra_cli/util.py,sha256=8KKW5LTHX4ebbwbHqMvLqwjZ11mOHI-xIYn-cZCWltg,6722
|
|
154
|
+
pyinfra_cli/virtualenv.py,sha256=wRNxOPcUkbD_Pzuj-Lnrz1KxGmsLlb2ObmCTFrdD-S8,2474
|
|
155
|
+
pyinfra-3.5.1.dist-info/METADATA,sha256=vlQV0UOJp4UabXoiD6rlQU6HV1oJ76tj3jklwU3cBPk,5740
|
|
156
|
+
pyinfra-3.5.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
157
|
+
pyinfra-3.5.1.dist-info/entry_points.txt,sha256=b1nLI6oVRvkeQDS00xcYGdGl4XVR_3tMbKs6T58-NW4,507
|
|
158
|
+
pyinfra-3.5.1.dist-info/licenses/LICENSE.md,sha256=BzCnRYLJv0yb-FJuEd_XOrrQSOEQKzIVo0yHT8taNnM,1076
|
|
159
|
+
pyinfra-3.5.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
[console_scripts]
|
|
2
|
+
pyinfra = pyinfra_cli.main:main
|
|
3
|
+
|
|
4
|
+
[pyinfra.connectors]
|
|
5
|
+
chroot = pyinfra.connectors.chroot:ChrootConnector
|
|
6
|
+
docker = pyinfra.connectors.docker:DockerConnector
|
|
7
|
+
dockerssh = pyinfra.connectors.dockerssh:DockerSSHConnector
|
|
8
|
+
local = pyinfra.connectors.local:LocalConnector
|
|
9
|
+
podman = pyinfra.connectors.docker:PodmanConnector
|
|
10
|
+
ssh = pyinfra.connectors.ssh:SSHConnector
|
|
11
|
+
terraform = pyinfra.connectors.terraform:TerraformInventoryConnector
|
|
12
|
+
vagrant = pyinfra.connectors.vagrant:VagrantInventoryConnector
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright (C)
|
|
1
|
+
Copyright (C) 2025 Nick Barrett <nick@fizzadar.com>
|
|
2
2
|
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
4
|
|