pyinfra 2.9.2__py2.py3-none-any.whl → 3.0b1__py2.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/api/__init__.py +3 -0
- pyinfra/api/arguments.py +261 -255
- pyinfra/api/arguments_typed.py +77 -0
- pyinfra/api/command.py +66 -53
- pyinfra/api/config.py +27 -22
- pyinfra/api/connect.py +1 -1
- pyinfra/api/connectors.py +2 -24
- pyinfra/api/deploy.py +21 -52
- pyinfra/api/exceptions.py +33 -8
- pyinfra/api/facts.py +77 -113
- pyinfra/api/host.py +150 -82
- pyinfra/api/inventory.py +17 -25
- pyinfra/api/operation.py +232 -198
- pyinfra/api/operations.py +102 -148
- pyinfra/api/state.py +137 -79
- pyinfra/api/util.py +55 -70
- pyinfra/connectors/base.py +150 -0
- pyinfra/connectors/chroot.py +160 -169
- pyinfra/connectors/docker.py +227 -237
- pyinfra/connectors/dockerssh.py +231 -253
- pyinfra/connectors/local.py +195 -207
- pyinfra/connectors/ssh.py +528 -615
- pyinfra/connectors/ssh_util.py +114 -0
- pyinfra/connectors/sshuserclient/client.py +5 -3
- pyinfra/connectors/terraform.py +86 -65
- pyinfra/connectors/util.py +212 -137
- pyinfra/connectors/vagrant.py +55 -48
- pyinfra/context.py +3 -2
- pyinfra/facts/docker.py +1 -0
- pyinfra/facts/files.py +45 -32
- pyinfra/facts/git.py +3 -1
- pyinfra/facts/gpg.py +1 -1
- pyinfra/facts/hardware.py +4 -2
- pyinfra/facts/iptables.py +5 -3
- pyinfra/facts/mysql.py +1 -0
- pyinfra/facts/postgres.py +168 -0
- pyinfra/facts/postgresql.py +5 -161
- pyinfra/facts/selinux.py +3 -1
- pyinfra/facts/server.py +77 -30
- pyinfra/facts/systemd.py +29 -12
- pyinfra/facts/sysvinit.py +10 -10
- pyinfra/facts/util/packaging.py +4 -2
- pyinfra/local.py +4 -5
- pyinfra/operations/apk.py +3 -3
- pyinfra/operations/apt.py +25 -47
- pyinfra/operations/brew.py +7 -14
- pyinfra/operations/bsdinit.py +4 -4
- pyinfra/operations/cargo.py +1 -1
- pyinfra/operations/choco.py +1 -1
- pyinfra/operations/dnf.py +4 -4
- pyinfra/operations/files.py +108 -321
- pyinfra/operations/gem.py +1 -1
- pyinfra/operations/git.py +6 -37
- pyinfra/operations/iptables.py +2 -10
- pyinfra/operations/launchd.py +1 -1
- pyinfra/operations/lxd.py +1 -9
- pyinfra/operations/mysql.py +5 -28
- pyinfra/operations/npm.py +1 -1
- pyinfra/operations/openrc.py +1 -1
- pyinfra/operations/pacman.py +3 -3
- pyinfra/operations/pip.py +14 -15
- pyinfra/operations/pkg.py +1 -1
- pyinfra/operations/pkgin.py +3 -3
- pyinfra/operations/postgres.py +347 -0
- pyinfra/operations/postgresql.py +17 -380
- pyinfra/operations/python.py +2 -17
- pyinfra/operations/selinux.py +5 -28
- pyinfra/operations/server.py +59 -84
- pyinfra/operations/snap.py +1 -3
- pyinfra/operations/ssh.py +8 -23
- pyinfra/operations/systemd.py +7 -7
- pyinfra/operations/sysvinit.py +3 -12
- pyinfra/operations/upstart.py +4 -4
- pyinfra/operations/util/__init__.py +12 -0
- pyinfra/operations/util/files.py +2 -2
- pyinfra/operations/util/packaging.py +6 -24
- pyinfra/operations/util/service.py +18 -37
- pyinfra/operations/vzctl.py +2 -2
- pyinfra/operations/xbps.py +3 -3
- pyinfra/operations/yum.py +4 -4
- pyinfra/operations/zypper.py +4 -4
- {pyinfra-2.9.2.dist-info → pyinfra-3.0b1.dist-info}/METADATA +19 -22
- pyinfra-3.0b1.dist-info/RECORD +163 -0
- pyinfra-3.0b1.dist-info/entry_points.txt +11 -0
- pyinfra_cli/__main__.py +2 -0
- pyinfra_cli/commands.py +7 -2
- pyinfra_cli/exceptions.py +83 -42
- pyinfra_cli/inventory.py +19 -4
- pyinfra_cli/log.py +17 -3
- pyinfra_cli/main.py +133 -90
- pyinfra_cli/prints.py +93 -129
- pyinfra_cli/util.py +60 -29
- tests/test_api/test_api.py +2 -0
- tests/test_api/test_api_arguments.py +13 -13
- tests/test_api/test_api_deploys.py +28 -29
- tests/test_api/test_api_facts.py +60 -98
- tests/test_api/test_api_operations.py +100 -200
- tests/test_cli/test_cli.py +18 -49
- tests/test_cli/test_cli_deploy.py +11 -37
- tests/test_cli/test_cli_exceptions.py +50 -19
- tests/test_cli/util.py +1 -1
- tests/test_connectors/test_chroot.py +6 -6
- tests/test_connectors/test_docker.py +4 -4
- tests/test_connectors/test_dockerssh.py +38 -50
- tests/test_connectors/test_local.py +11 -12
- tests/test_connectors/test_ssh.py +66 -107
- tests/test_connectors/test_terraform.py +9 -15
- tests/test_connectors/test_util.py +24 -46
- tests/test_connectors/test_vagrant.py +4 -4
- pyinfra/api/operation.pyi +0 -117
- pyinfra/connectors/ansible.py +0 -171
- pyinfra/connectors/mech.py +0 -186
- pyinfra/connectors/pyinfrawinrmsession/__init__.py +0 -28
- pyinfra/connectors/winrm.py +0 -320
- pyinfra/facts/windows.py +0 -366
- pyinfra/facts/windows_files.py +0 -90
- pyinfra/operations/windows.py +0 -59
- pyinfra/operations/windows_files.py +0 -551
- pyinfra-2.9.2.dist-info/RECORD +0 -170
- pyinfra-2.9.2.dist-info/entry_points.txt +0 -14
- tests/test_connectors/test_ansible.py +0 -64
- tests/test_connectors/test_mech.py +0 -126
- tests/test_connectors/test_winrm.py +0 -76
- {pyinfra-2.9.2.dist-info → pyinfra-3.0b1.dist-info}/LICENSE.md +0 -0
- {pyinfra-2.9.2.dist-info → pyinfra-3.0b1.dist-info}/WHEEL +0 -0
- {pyinfra-2.9.2.dist-info → pyinfra-3.0b1.dist-info}/top_level.txt +0 -0
pyinfra/operations/sysvinit.py
CHANGED
|
@@ -12,7 +12,7 @@ from . import files
|
|
|
12
12
|
from .util.service import handle_service_control
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
@operation
|
|
15
|
+
@operation()
|
|
16
16
|
def service(
|
|
17
17
|
service,
|
|
18
18
|
running=True,
|
|
@@ -75,34 +75,25 @@ def service(
|
|
|
75
75
|
# If no links exist, attempt to enable the service using distro-specific commands
|
|
76
76
|
if enabled is True and not start_links:
|
|
77
77
|
distro = host.get_fact(LinuxDistribution).get("name")
|
|
78
|
-
did_add = False
|
|
79
78
|
|
|
80
79
|
if distro in ("Ubuntu", "Debian"):
|
|
81
80
|
yield "update-rc.d {0} defaults".format(service)
|
|
82
|
-
did_add = True
|
|
83
81
|
|
|
84
82
|
elif distro in ("CentOS", "Fedora", "Red Hat Enterprise Linux"):
|
|
85
83
|
yield "chkconfig {0} --add".format(service)
|
|
86
84
|
yield "chkconfig {0} on".format(service)
|
|
87
|
-
did_add = True
|
|
88
85
|
|
|
89
86
|
elif distro == "Gentoo":
|
|
90
87
|
yield "rc-update add {0} default".format(service)
|
|
91
|
-
did_add = True
|
|
92
|
-
|
|
93
|
-
# Add a single start link to the fact if we executed a command
|
|
94
|
-
if did_add:
|
|
95
|
-
start_links.append("/etc/rc0.d/S20{0}".format(service))
|
|
96
88
|
|
|
97
89
|
# Remove any /etc/rcX.d/<service> start links
|
|
98
90
|
elif enabled is False:
|
|
99
91
|
# No state checking, just blindly remove any that exist
|
|
100
92
|
for link in start_links:
|
|
101
93
|
yield "rm -f {0}".format(link)
|
|
102
|
-
start_links.remove(link)
|
|
103
94
|
|
|
104
95
|
|
|
105
|
-
@operation
|
|
96
|
+
@operation()
|
|
106
97
|
def enable(
|
|
107
98
|
service,
|
|
108
99
|
start_priority=20,
|
|
@@ -142,7 +133,7 @@ def enable(
|
|
|
142
133
|
|
|
143
134
|
# Ensure all the new links exist
|
|
144
135
|
for link in links:
|
|
145
|
-
yield from files.link(
|
|
136
|
+
yield from files.link._inner(
|
|
146
137
|
path=link,
|
|
147
138
|
target="/etc/init.d/{0}".format(service),
|
|
148
139
|
)
|
pyinfra/operations/upstart.py
CHANGED
|
@@ -12,7 +12,7 @@ from . import files
|
|
|
12
12
|
from .util.service import handle_service_control
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
@operation
|
|
15
|
+
@operation()
|
|
16
16
|
def service(
|
|
17
17
|
service,
|
|
18
18
|
running=True,
|
|
@@ -52,15 +52,15 @@ def service(
|
|
|
52
52
|
# Upstart jobs are setup w/runlevels etc in their config files, so here we just check
|
|
53
53
|
# there's no override file.
|
|
54
54
|
if enabled is True:
|
|
55
|
-
yield from files.file(
|
|
56
|
-
"/etc/init/{0}.override".format(service),
|
|
55
|
+
yield from files.file._inner(
|
|
56
|
+
path="/etc/init/{0}.override".format(service),
|
|
57
57
|
present=False,
|
|
58
58
|
)
|
|
59
59
|
|
|
60
60
|
# Set the override file to "manual" to disable automatic start
|
|
61
61
|
elif enabled is False:
|
|
62
62
|
file = StringIO("manual\n")
|
|
63
|
-
yield from files.put(
|
|
63
|
+
yield from files.put._inner(
|
|
64
64
|
src=file,
|
|
65
65
|
dest="/etc/init/{0}.override".format(service),
|
|
66
66
|
)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, Callable
|
|
2
|
+
|
|
3
|
+
if TYPE_CHECKING:
|
|
4
|
+
from pyinfra.api.operation import OperationMeta
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def any_changed(*args: "OperationMeta") -> Callable[[], bool]:
|
|
8
|
+
return lambda: any((meta.did_change() for meta in args))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def all_changed(*args: "OperationMeta") -> Callable[[], bool]:
|
|
12
|
+
return lambda: all((meta.did_change() for meta in args))
|
pyinfra/operations/util/files.py
CHANGED
|
@@ -4,8 +4,8 @@ from datetime import datetime
|
|
|
4
4
|
from pyinfra.api import QuoteString, StringCommand
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
def unix_path_join(*
|
|
8
|
-
parts = list(
|
|
7
|
+
def unix_path_join(*path_parts):
|
|
8
|
+
parts = list(path_parts)
|
|
9
9
|
parts[0:-1] = [part.rstrip("/") for part in parts[0:-1]]
|
|
10
10
|
return "/".join(parts)
|
|
11
11
|
|
|
@@ -149,20 +149,6 @@ def ensure_packages(
|
|
|
149
149
|
" ".join([shlex.quote(pkg) for pkg in joined_packages]),
|
|
150
150
|
)
|
|
151
151
|
|
|
152
|
-
for package in diff_packages: # add/remove from current packages
|
|
153
|
-
pkg_name = _package_name(package)
|
|
154
|
-
version = "unknown"
|
|
155
|
-
if isinstance(package, list):
|
|
156
|
-
version = package[1]
|
|
157
|
-
|
|
158
|
-
if present:
|
|
159
|
-
current_packages[pkg_name] = [version]
|
|
160
|
-
current_packages.update(diff_expanded_packages.get(pkg_name, {}))
|
|
161
|
-
else:
|
|
162
|
-
current_packages.pop(pkg_name, None)
|
|
163
|
-
for name in diff_expanded_packages.get(pkg_name, {}):
|
|
164
|
-
current_packages.pop(name, None)
|
|
165
|
-
|
|
166
152
|
if latest and upgrade_command and upgrade_packages:
|
|
167
153
|
yield "{0} {1}".format(
|
|
168
154
|
upgrade_command,
|
|
@@ -176,10 +162,10 @@ def ensure_rpm(state, host, files, source, present, package_manager_command):
|
|
|
176
162
|
# If source is a url
|
|
177
163
|
if urlparse(source).scheme:
|
|
178
164
|
# Generate a temp filename (with .rpm extension to please yum)
|
|
179
|
-
temp_filename = "{0}.rpm".format(
|
|
165
|
+
temp_filename = "{0}.rpm".format(host.get_temp_filename(source))
|
|
180
166
|
|
|
181
167
|
# Ensure it's downloaded
|
|
182
|
-
yield from files.download(source, temp_filename)
|
|
168
|
+
yield from files.download._inner(source, temp_filename)
|
|
183
169
|
|
|
184
170
|
# Override the source with the downloaded file
|
|
185
171
|
source = temp_filename
|
|
@@ -199,8 +185,6 @@ def ensure_rpm(state, host, files, source, present, package_manager_command):
|
|
|
199
185
|
# If we had info, always install
|
|
200
186
|
if info:
|
|
201
187
|
yield "rpm -i {0}".format(source)
|
|
202
|
-
host.create_fact(RpmPackage, kwargs={"name": info["name"]}, data=info)
|
|
203
|
-
|
|
204
188
|
# This happens if we download the package mid-deploy, so we have no info
|
|
205
189
|
# but also don't know if it's installed. So check at runtime, otherwise
|
|
206
190
|
# the install will fail.
|
|
@@ -210,8 +194,6 @@ def ensure_rpm(state, host, files, source, present, package_manager_command):
|
|
|
210
194
|
# Package exists but we don't want?
|
|
211
195
|
elif exists and not present:
|
|
212
196
|
yield "{0} remove -y {1}".format(package_manager_command, info["name"])
|
|
213
|
-
host.delete_fact(RpmPackage, kwargs={"name": info["name"]})
|
|
214
|
-
|
|
215
197
|
else:
|
|
216
198
|
host.noop(
|
|
217
199
|
"rpm {0} is {1}".format(
|
|
@@ -247,13 +229,13 @@ def ensure_yum_repo(
|
|
|
247
229
|
|
|
248
230
|
# If we don't want the repo, just remove any existing file
|
|
249
231
|
if not present:
|
|
250
|
-
yield from files.file(filename, present=False)
|
|
232
|
+
yield from files.file._inner(filename, present=False)
|
|
251
233
|
return
|
|
252
234
|
|
|
253
235
|
# If we're a URL, download the repo if it doesn't exist
|
|
254
236
|
if url:
|
|
255
237
|
if not host.get_fact(File, path=filename):
|
|
256
|
-
yield from files.download(url, filename)
|
|
238
|
+
yield from files.download._inner(url, filename)
|
|
257
239
|
return
|
|
258
240
|
|
|
259
241
|
# Description defaults to name
|
|
@@ -276,7 +258,7 @@ def ensure_yum_repo(
|
|
|
276
258
|
|
|
277
259
|
repo_lines.append("")
|
|
278
260
|
repo = "\n".join(repo_lines)
|
|
279
|
-
|
|
261
|
+
repo_file = StringIO(repo)
|
|
280
262
|
|
|
281
263
|
# Ensure this is the file on the server
|
|
282
|
-
yield from files.put(
|
|
264
|
+
yield from files.put._inner(repo_file, filename)
|
|
@@ -11,46 +11,27 @@ def handle_service_control(
|
|
|
11
11
|
):
|
|
12
12
|
status = statuses.get(name, None)
|
|
13
13
|
|
|
14
|
-
#
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
"else ({start_command}); fi"
|
|
21
|
-
).format(
|
|
22
|
-
status_command=formatter.format(name, status_argument),
|
|
23
|
-
start_command=(formatter.format(name, "start") if running is True else "true"),
|
|
24
|
-
stop_command=(formatter.format(name, "stop") if running is False else "true"),
|
|
25
|
-
restart_command=(formatter.format(name, "restart") if restarted else "true"),
|
|
26
|
-
reload_command=(formatter.format(name, "reload") if reloaded else "true"),
|
|
27
|
-
)
|
|
28
|
-
statuses[name] = running
|
|
14
|
+
# Need down but running
|
|
15
|
+
if running is False:
|
|
16
|
+
if status:
|
|
17
|
+
yield formatter.format(name, "stop")
|
|
18
|
+
else:
|
|
19
|
+
host.noop("service {0} is stopped".format(name))
|
|
29
20
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
else:
|
|
37
|
-
host.noop("service {0} is stopped".format(name))
|
|
21
|
+
# Need running but down
|
|
22
|
+
if running is True:
|
|
23
|
+
if not status:
|
|
24
|
+
yield formatter.format(name, "start")
|
|
25
|
+
else:
|
|
26
|
+
host.noop("service {0} is running".format(name))
|
|
38
27
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
yield formatter.format(name, "start")
|
|
43
|
-
statuses[name] = True
|
|
44
|
-
else:
|
|
45
|
-
host.noop("service {0} is running".format(name))
|
|
28
|
+
# Only restart if the service is already running
|
|
29
|
+
if restarted and status:
|
|
30
|
+
yield formatter.format(name, "restart")
|
|
46
31
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
# Only reload if the service is already reloaded
|
|
52
|
-
if reloaded and status:
|
|
53
|
-
yield formatter.format(name, "reload")
|
|
32
|
+
# Only reload if the service is already reloaded
|
|
33
|
+
if reloaded and status:
|
|
34
|
+
yield formatter.format(name, "reload")
|
|
54
35
|
|
|
55
36
|
# Always execute arbitrary commands as these may or may not rely on the service
|
|
56
37
|
# being up or down
|
pyinfra/operations/vzctl.py
CHANGED
|
@@ -46,8 +46,8 @@ def restart(ctid, force=False):
|
|
|
46
46
|
+ force: whether to force container start
|
|
47
47
|
"""
|
|
48
48
|
|
|
49
|
-
yield from stop(ctid)
|
|
50
|
-
yield from start(ctid, force=force)
|
|
49
|
+
yield from stop._inner(ctid)
|
|
50
|
+
yield from start._inner(ctid, force=force)
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
@operation(is_idempotent=False)
|
pyinfra/operations/xbps.py
CHANGED
|
@@ -18,7 +18,7 @@ def upgrade():
|
|
|
18
18
|
yield "xbps-install -y -u"
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
_upgrade = upgrade # noqa: E305
|
|
21
|
+
_upgrade = upgrade._inner # noqa: E305
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
@operation(is_idempotent=False)
|
|
@@ -30,10 +30,10 @@ def update():
|
|
|
30
30
|
yield "xbps-install -S"
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
_update = update # noqa: E305
|
|
33
|
+
_update = update._inner # noqa: E305
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
@operation
|
|
36
|
+
@operation()
|
|
37
37
|
def packages(
|
|
38
38
|
packages=None,
|
|
39
39
|
present=True,
|
pyinfra/operations/yum.py
CHANGED
|
@@ -35,7 +35,7 @@ def key(src):
|
|
|
35
35
|
yield "rpm --import {0}".format(src)
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
@operation
|
|
38
|
+
@operation()
|
|
39
39
|
def repo(
|
|
40
40
|
src,
|
|
41
41
|
present=True,
|
|
@@ -94,7 +94,7 @@ def repo(
|
|
|
94
94
|
)
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
@operation
|
|
97
|
+
@operation()
|
|
98
98
|
def rpm(src, present=True):
|
|
99
99
|
# NOTE: if updating this docstring also update `dnf.rpm`
|
|
100
100
|
"""
|
|
@@ -130,10 +130,10 @@ def update():
|
|
|
130
130
|
yield "yum update -y"
|
|
131
131
|
|
|
132
132
|
|
|
133
|
-
_update = update # noqa: E305 (for use below where update is a kwarg)
|
|
133
|
+
_update = update._inner # noqa: E305 (for use below where update is a kwarg)
|
|
134
134
|
|
|
135
135
|
|
|
136
|
-
@operation
|
|
136
|
+
@operation()
|
|
137
137
|
def packages(
|
|
138
138
|
packages=None,
|
|
139
139
|
present=True,
|
pyinfra/operations/zypper.py
CHANGED
|
@@ -9,7 +9,7 @@ from .yum import key as yum_key
|
|
|
9
9
|
key = yum_key
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
@operation
|
|
12
|
+
@operation()
|
|
13
13
|
def repo(
|
|
14
14
|
src,
|
|
15
15
|
baseurl=None,
|
|
@@ -71,7 +71,7 @@ def repo(
|
|
|
71
71
|
)
|
|
72
72
|
|
|
73
73
|
|
|
74
|
-
@operation
|
|
74
|
+
@operation()
|
|
75
75
|
def rpm(src, present=True):
|
|
76
76
|
# NOTE: if updating this docstring also update `dnf.rpm`
|
|
77
77
|
"""
|
|
@@ -106,10 +106,10 @@ def update():
|
|
|
106
106
|
yield "zypper update -y"
|
|
107
107
|
|
|
108
108
|
|
|
109
|
-
_update = update # noqa: E305 (for use below where update is a kwarg)
|
|
109
|
+
_update = update._inner # noqa: E305 (for use below where update is a kwarg)
|
|
110
110
|
|
|
111
111
|
|
|
112
|
-
@operation
|
|
112
|
+
@operation()
|
|
113
113
|
def packages(
|
|
114
114
|
packages=None,
|
|
115
115
|
present=True,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pyinfra
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0b1
|
|
4
4
|
Summary: pyinfra automates/provisions/manages/deploys infrastructure.
|
|
5
5
|
Home-page: https://pyinfra.com
|
|
6
6
|
Author: Nick / Fizzadar
|
|
@@ -16,7 +16,6 @@ Classifier: Intended Audience :: Information Technology
|
|
|
16
16
|
Classifier: License :: OSI Approved :: MIT License
|
|
17
17
|
Classifier: Operating System :: OS Independent
|
|
18
18
|
Classifier: Programming Language :: Python :: 3
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.6
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.7
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.8
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.9
|
|
@@ -34,25 +33,26 @@ Requires-Dist: python-dateutil <3,>2
|
|
|
34
33
|
Requires-Dist: setuptools
|
|
35
34
|
Requires-Dist: configparser
|
|
36
35
|
Requires-Dist: pywinrm
|
|
36
|
+
Requires-Dist: typeguard
|
|
37
37
|
Requires-Dist: distro <2,>=1.6
|
|
38
|
+
Requires-Dist: typing-extensions ; python_version < "3.11"
|
|
38
39
|
Requires-Dist: graphlib-backport ; python_version < "3.9"
|
|
39
|
-
Provides-Extra: ansible
|
|
40
|
-
Requires-Dist: pyyaml ; extra == 'ansible'
|
|
41
40
|
Provides-Extra: dev
|
|
42
|
-
Requires-Dist:
|
|
41
|
+
Requires-Dist: pytest ==7.2.0 ; extra == 'dev'
|
|
42
|
+
Requires-Dist: coverage ==6.5 ; extra == 'dev'
|
|
43
43
|
Requires-Dist: pytest-cov ==4.0.0 ; extra == 'dev'
|
|
44
44
|
Requires-Dist: black ==22.3.0 ; extra == 'dev'
|
|
45
45
|
Requires-Dist: isort ==5.10.1 ; extra == 'dev'
|
|
46
46
|
Requires-Dist: flake8 ==4.0.1 ; extra == 'dev'
|
|
47
47
|
Requires-Dist: flake8-black ==0.3.0 ; extra == 'dev'
|
|
48
48
|
Requires-Dist: flake8-isort ==4.1.1 ; extra == 'dev'
|
|
49
|
-
Requires-Dist: mypy
|
|
49
|
+
Requires-Dist: mypy ; extra == 'dev'
|
|
50
50
|
Requires-Dist: types-cryptography ; extra == 'dev'
|
|
51
51
|
Requires-Dist: types-paramiko ; extra == 'dev'
|
|
52
52
|
Requires-Dist: types-python-dateutil ; extra == 'dev'
|
|
53
53
|
Requires-Dist: types-PyYAML ; extra == 'dev'
|
|
54
54
|
Requires-Dist: types-setuptools ; extra == 'dev'
|
|
55
|
-
Requires-Dist: pyinfra-guzzle-sphinx-theme ==0.
|
|
55
|
+
Requires-Dist: pyinfra-guzzle-sphinx-theme ==0.15 ; extra == 'dev'
|
|
56
56
|
Requires-Dist: myst-parser ==2.0.0 ; extra == 'dev'
|
|
57
57
|
Requires-Dist: sphinx ==6.2.1 ; extra == 'dev'
|
|
58
58
|
Requires-Dist: wheel ; extra == 'dev'
|
|
@@ -62,32 +62,25 @@ Requires-Dist: ipdb ; extra == 'dev'
|
|
|
62
62
|
Requires-Dist: ipdbplugin ; extra == 'dev'
|
|
63
63
|
Requires-Dist: flake8-spellcheck ==0.12.1 ; extra == 'dev'
|
|
64
64
|
Requires-Dist: redbaron ; extra == 'dev'
|
|
65
|
-
Requires-Dist: pytest ==7.0.1 ; (python_version <= "3.6") and extra == 'dev'
|
|
66
|
-
Requires-Dist: coverage ==6.2 ; (python_version <= "3.6") and extra == 'dev'
|
|
67
|
-
Requires-Dist: pytest ==7.2.0 ; (python_version > "3.6") and extra == 'dev'
|
|
68
|
-
Requires-Dist: coverage ==6.5 ; (python_version > "3.6") and extra == 'dev'
|
|
69
65
|
Provides-Extra: docs
|
|
70
|
-
Requires-Dist: pyinfra-guzzle-sphinx-theme ==0.
|
|
66
|
+
Requires-Dist: pyinfra-guzzle-sphinx-theme ==0.15 ; extra == 'docs'
|
|
71
67
|
Requires-Dist: myst-parser ==2.0.0 ; extra == 'docs'
|
|
72
68
|
Requires-Dist: sphinx ==6.2.1 ; extra == 'docs'
|
|
73
69
|
Provides-Extra: test
|
|
74
|
-
Requires-Dist:
|
|
70
|
+
Requires-Dist: pytest ==7.2.0 ; extra == 'test'
|
|
71
|
+
Requires-Dist: coverage ==6.5 ; extra == 'test'
|
|
75
72
|
Requires-Dist: pytest-cov ==4.0.0 ; extra == 'test'
|
|
76
73
|
Requires-Dist: black ==22.3.0 ; extra == 'test'
|
|
77
74
|
Requires-Dist: isort ==5.10.1 ; extra == 'test'
|
|
78
75
|
Requires-Dist: flake8 ==4.0.1 ; extra == 'test'
|
|
79
76
|
Requires-Dist: flake8-black ==0.3.0 ; extra == 'test'
|
|
80
77
|
Requires-Dist: flake8-isort ==4.1.1 ; extra == 'test'
|
|
81
|
-
Requires-Dist: mypy
|
|
78
|
+
Requires-Dist: mypy ; extra == 'test'
|
|
82
79
|
Requires-Dist: types-cryptography ; extra == 'test'
|
|
83
80
|
Requires-Dist: types-paramiko ; extra == 'test'
|
|
84
81
|
Requires-Dist: types-python-dateutil ; extra == 'test'
|
|
85
82
|
Requires-Dist: types-PyYAML ; extra == 'test'
|
|
86
83
|
Requires-Dist: types-setuptools ; extra == 'test'
|
|
87
|
-
Requires-Dist: pytest ==7.0.1 ; (python_version <= "3.6") and extra == 'test'
|
|
88
|
-
Requires-Dist: coverage ==6.2 ; (python_version <= "3.6") and extra == 'test'
|
|
89
|
-
Requires-Dist: pytest ==7.2.0 ; (python_version > "3.6") and extra == 'test'
|
|
90
|
-
Requires-Dist: coverage ==6.5 ; (python_version > "3.6") and extra == 'test'
|
|
91
84
|
|
|
92
85
|
<p align="center">
|
|
93
86
|
<a href="https://pyinfra.com">
|
|
@@ -95,13 +88,17 @@ Requires-Dist: coverage ==6.5 ; (python_version > "3.6") and extra == 'test'
|
|
|
95
88
|
</a>
|
|
96
89
|
</p>
|
|
97
90
|
|
|
98
|
-
<p
|
|
99
|
-
<
|
|
91
|
+
<p>
|
|
92
|
+
<strong>Note: this is the v3 branch, which is currently in beta. <a href="https://docs.pyinfra.com/en/next">See the docs for v3</a>. If needed the <a href="https://github.com/pyinfra-dev/pyinfra/tree/2.x/">2.x branch is here</a>, but is in bugfix only mode.</strong>
|
|
93
|
+
</p>
|
|
94
|
+
|
|
95
|
+
<p>
|
|
96
|
+
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.
|
|
100
97
|
</p>
|
|
101
98
|
|
|
102
99
|
---
|
|
103
100
|
|
|
104
|
-
<p
|
|
101
|
+
<p>
|
|
105
102
|
<a href="https://docs.pyinfra.com"><strong>Documentation</strong></a> ⇒
|
|
106
103
|
<a href="https://docs.pyinfra.com/page/getting-started.html"><strong>Getting Started</strong></a> •
|
|
107
104
|
<a href="https://docs.pyinfra.com/page/examples.html"><strong>Examples</strong></a> •
|
|
@@ -109,7 +106,7 @@ Requires-Dist: coverage ==6.5 ; (python_version > "3.6") and extra == 'test'
|
|
|
109
106
|
<a href="https://docs.pyinfra.com/page/contributing.html"><strong>Contributing</strong></a>
|
|
110
107
|
</p>
|
|
111
108
|
|
|
112
|
-
<p
|
|
109
|
+
<p>
|
|
113
110
|
Chat ⇒
|
|
114
111
|
<a href="https://matrix.to/#/#pyinfra:matrix.org"><strong><code>#pyinfra</code> on Matrix</strong></a>
|
|
115
112
|
</p>
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
pyinfra/__init__.py,sha256=7ZcKHGWk7_nYxsYrbFBB_vJr-J-Ddbc56ZS4sk5ArVw,535
|
|
2
|
+
pyinfra/__main__.py,sha256=aVd00glLz5CMJGXgt1XxbOvC2HluqaowoTOjxgIpBaA,47
|
|
3
|
+
pyinfra/context.py,sha256=4oPK1wsLL4aG5CJtt7Ufe_4D3knrBeZaeZWlU979JNg,3394
|
|
4
|
+
pyinfra/local.py,sha256=0bpIRCyDKM6i_jA1i8Ej2qr_iWIF9cUYWutXNdLj8po,2751
|
|
5
|
+
pyinfra/progress.py,sha256=X3hXZ4Flh_L9FE4ZEWxWoG0R4dA5UPd1FCO-Exd5Xtc,4193
|
|
6
|
+
pyinfra/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
pyinfra/version.py,sha256=hAgEPHVJVjA2I-rI0gy038UAPVKcmulk-3dZLOmkYrI,153
|
|
8
|
+
pyinfra/api/__init__.py,sha256=suGbKKM-qCduuXFYBEcyswlTqozewtYpdLRhK63PVn0,942
|
|
9
|
+
pyinfra/api/arguments.py,sha256=1kTpgvCeKpMnmf7IhIfARjEjz0-94L7ud1qP90JSeAU,9748
|
|
10
|
+
pyinfra/api/arguments_typed.py,sha256=fy_Sg3UgzYmm7rG8Vvheu_Ah-YjpfpIkBIRDFUbYhaY,2254
|
|
11
|
+
pyinfra/api/command.py,sha256=KGhAnaxZGZv5NJa0-aOgu2g9nOYTsdjlCaFHR6QO53E,7176
|
|
12
|
+
pyinfra/api/config.py,sha256=G1ZNHw26G1QyqEBU6AuFsK3jVKdgW-VPqE9WZgtlzkg,4221
|
|
13
|
+
pyinfra/api/connect.py,sha256=Z9wusMLR_jBkKKk5D4AUOj8LHl3H5MsNO5FxAeR4jac,1416
|
|
14
|
+
pyinfra/api/connectors.py,sha256=SLmKtoN4cXvcQz9IgWSPI-d3ZMzJ09pcvka42Fiuo7s,544
|
|
15
|
+
pyinfra/api/deploy.py,sha256=xo4F7URUf3xzIChRHZn4zwqs_WTjLjZNC9i9eQjAFk8,2756
|
|
16
|
+
pyinfra/api/exceptions.py,sha256=cCbUp1qN1QO0d9aAvOAbRgYpLi0vUI5j7ZqSjcD1_P8,1861
|
|
17
|
+
pyinfra/api/facts.py,sha256=FOIn6qO2tw5I1hkS0fAaBmhGfnMwKWZjn1ZqCnU6_pA,10282
|
|
18
|
+
pyinfra/api/host.py,sha256=CzTDyYROIZqDSCVTrlIOoX1ODqLMNlW08W1nN9oH-Rs,13475
|
|
19
|
+
pyinfra/api/inventory.py,sha256=83ttxbGbIwN2tvmVTW68fumIDXNMk48qvL0NxwGPkNs,7663
|
|
20
|
+
pyinfra/api/operation.py,sha256=2r3RylueNAjDL0SwCIln84Jpwl2KA3Xep2rtwGQXX3I,14789
|
|
21
|
+
pyinfra/api/operations.py,sha256=jvz9ISfwmQnAQVUKLnbrRdD9QHIAAfypo9l5b3fYG1w,10894
|
|
22
|
+
pyinfra/api/state.py,sha256=3dXRjeZJXnzLcbP9E4aogkRPwIg3_kK1h4Tf4FVZock,12622
|
|
23
|
+
pyinfra/api/util.py,sha256=TkUlcMPIrLGxRQY19CvCXL1H_20DjFTmFL0QbFqQ0gw,11977
|
|
24
|
+
pyinfra/connectors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
+
pyinfra/connectors/base.py,sha256=41RSf0t6LlYZe3nW9B1CfbOwbOulaDnZT3fnGn23DWw,3756
|
|
26
|
+
pyinfra/connectors/chroot.py,sha256=Xd72I8T58KIwKOoc0LXCw91AoEIaiHfRLDcDVTHGJ0o,5931
|
|
27
|
+
pyinfra/connectors/docker.py,sha256=NRqE8543j0eqUnjv2wbokW-hWkam2kZNiokPTGYDBXI,8964
|
|
28
|
+
pyinfra/connectors/dockerssh.py,sha256=VWHY--jqs3yf-RuPUZXav4vLeON9SzoVC9CUyOJo1rg,8919
|
|
29
|
+
pyinfra/connectors/local.py,sha256=szFO9VP5xNWpqK9ThkjroyFvnxckiG5kjM08vgqbVhc,6929
|
|
30
|
+
pyinfra/connectors/ssh.py,sha256=w3UTuZOeO9fFwcvQWZ7xS8KyCvsWWd4uKJc_6ONSMrU,21018
|
|
31
|
+
pyinfra/connectors/ssh_util.py,sha256=CN_5AdTA3RpiWCnXTrRBjez1NsN59hITDzQmXIkZvoE,3683
|
|
32
|
+
pyinfra/connectors/terraform.py,sha256=G7lK168Fz0jNFetc_7_bPT-RnoaRDksJat0R26fqkUk,3617
|
|
33
|
+
pyinfra/connectors/util.py,sha256=JBGTgBkXQTu7l5uVYPzVfQdPXwehmRWkMf8IEVj2gGs,11326
|
|
34
|
+
pyinfra/connectors/vagrant.py,sha256=6edwwc5rMfEFridUN9BXytoIeXeBQvyoucLcSUTGivs,4722
|
|
35
|
+
pyinfra/connectors/sshuserclient/__init__.py,sha256=Qc4RO2wknSWIiNTwOeQ0y2TeiuKHmyWDW2Dz4MOo9CE,44
|
|
36
|
+
pyinfra/connectors/sshuserclient/client.py,sha256=7YSd3QckZuPDRnKzy2FfG3J8zp7CY-jny8tbWwxvKro,9720
|
|
37
|
+
pyinfra/connectors/sshuserclient/config.py,sha256=UMwkvTgAIS7__re6Wz_pwH6EU4kO1-uMQ5zuFakH0v4,2721
|
|
38
|
+
pyinfra/facts/__init__.py,sha256=myTXSOZmAqmU88Fyifn035h9Lr6Gj2mlka_jDcXyKGw,347
|
|
39
|
+
pyinfra/facts/apk.py,sha256=2-Hz4I_7iLU06Y0T9_JX5Fo3k_FZpgKNGZ_I5KQGTto,482
|
|
40
|
+
pyinfra/facts/apt.py,sha256=zqFSPIAaIgHWWg3eGgL-BDX1aqvgiQ7rNc8QrE1LXLg,1999
|
|
41
|
+
pyinfra/facts/brew.py,sha256=POnOx3PWzK1B8pbtkI9wBmYSUsG0IblpwrMHZsMC7Og,2266
|
|
42
|
+
pyinfra/facts/bsdinit.py,sha256=sx54RAmS7rjTDzLbUWv86UFtfE8H56qokektf5smN30,490
|
|
43
|
+
pyinfra/facts/cargo.py,sha256=C_2NIWcDzT5Y6xxnT5TvuhWpLJCQTqVVXK8biiUvhjI,531
|
|
44
|
+
pyinfra/facts/choco.py,sha256=gYdgqglICBn6SStyJvHwQGD8ayo0Zwp5EMiNuYRs5VY,703
|
|
45
|
+
pyinfra/facts/deb.py,sha256=v2wSbOIFefY7QrQbXZ584mH_bDW9kzUqozCvZ_5dEgE,1666
|
|
46
|
+
pyinfra/facts/dnf.py,sha256=zV_Fx4cq81lyKctDYki65e088kXDAyZiwkEcBDOoLtU,862
|
|
47
|
+
pyinfra/facts/docker.py,sha256=0EUskxna88haXeHYJBFUDnUHJcX2QIwwKME_dRcfoiY,1678
|
|
48
|
+
pyinfra/facts/files.py,sha256=VJujyRa9FiowXnNJUuDmYk6hJi8DYJYetvOAnatkpcg,11475
|
|
49
|
+
pyinfra/facts/gem.py,sha256=bUl8PcXHb5wIw3O4E9YAc0cPzCZQK1IbV_4f3hZht6s,473
|
|
50
|
+
pyinfra/facts/git.py,sha256=rk4NS2SQJiosI6eY2eCy_p9kOP4O8UARRjFi16ObE2w,1294
|
|
51
|
+
pyinfra/facts/gpg.py,sha256=OCfXW-JQpjyn7jLrluEXjpu9Wr_DE_6eWEsyKVLOnNU,3729
|
|
52
|
+
pyinfra/facts/hardware.py,sha256=rEwe5nK6m_c3zLsEpU0x0qSkGCZfKrBlUVhhjAT2Bbo,11402
|
|
53
|
+
pyinfra/facts/iptables.py,sha256=sUkywfHZUXnMZF_KshAnyJufrJvZ9fBYnERSRbwOCRE,3374
|
|
54
|
+
pyinfra/facts/launchd.py,sha256=NtsaAJh0rncopvuawqqv36kOdFsUdpiYS7e5yCGoXeA,668
|
|
55
|
+
pyinfra/facts/lxd.py,sha256=uYmqu8vSzfhM0Ymm15pT4IhI4UbRayC23GM6kSYN1mw,337
|
|
56
|
+
pyinfra/facts/mysql.py,sha256=o5qvcxKjW2zXNSr4tLZa1IaNEUz0TVLWy7T9uLlxTm8,5896
|
|
57
|
+
pyinfra/facts/npm.py,sha256=c_bU5BoeOfBfZd_qyz2K1ZzzlH_k1VSzjuOiGqC4H8o,674
|
|
58
|
+
pyinfra/facts/openrc.py,sha256=IluFop9jskxHnWRJkKlGZZV7nQDOFzhiAMAH0ThyiLo,1350
|
|
59
|
+
pyinfra/facts/pacman.py,sha256=SJTdi49nBHk7Gb6ajf2I5PZTHWkqZ_k4npAf695luRs,1001
|
|
60
|
+
pyinfra/facts/pip.py,sha256=v6pJCQHOB8DaDgpyrLTz3kKKCSqvLG_zs0uy6_gGOf8,702
|
|
61
|
+
pyinfra/facts/pkg.py,sha256=GgRU5x9OWfAfqF-KgJiJz0ndtLKhiRGhtTG4agfunuM,452
|
|
62
|
+
pyinfra/facts/pkgin.py,sha256=_rekZJtKLx2TOHd_REJLMDp02typZMpQkZ7sC4FLJSQ,481
|
|
63
|
+
pyinfra/facts/postgres.py,sha256=ncx16P6UDZBuOw_7TG_t4AMLSKiI2Xu2nEBPLZ4HZ6Y,4094
|
|
64
|
+
pyinfra/facts/postgresql.py,sha256=nWXwIFFYnF7vGj-yGmhtI2OAQEvlnpIAs-WupUja9vI,187
|
|
65
|
+
pyinfra/facts/rpm.py,sha256=CdC-r2_cfbt81z3sjAE4I-ne46jI-Of6uyDSvELVJfk,1973
|
|
66
|
+
pyinfra/facts/selinux.py,sha256=N0zbJrAtBeRBtxZFUHbYTLQ2L4mRV7_Oj3Cj3OA1Npw,4272
|
|
67
|
+
pyinfra/facts/server.py,sha256=gxEW1By_mi9BVZcAQZC5o1Sz0pxQdPVzoQRXV7WxM5w,19794
|
|
68
|
+
pyinfra/facts/snap.py,sha256=9PYA73ASi-FgBk_y42lGJyETqEgfcJGm-6EFeKzayhE,1910
|
|
69
|
+
pyinfra/facts/systemd.py,sha256=jhTIMcN96lJbV03xrEjB_0YLg1BxKTFfq5KcpNXtH9Y,3927
|
|
70
|
+
pyinfra/facts/sysvinit.py,sha256=PS7yMOrVxclywKjF3BIXmxTBgn2_vpSTQrDeOly_j8Q,1490
|
|
71
|
+
pyinfra/facts/upstart.py,sha256=9mqTYsUpDs7gC5Rest2sQS3EohGXAPjEQUINJWELkW0,543
|
|
72
|
+
pyinfra/facts/vzctl.py,sha256=AnRl6SZ7HxMGOVl021v0P37pN4tujbwLFuvxUMOCW_M,591
|
|
73
|
+
pyinfra/facts/xbps.py,sha256=HBvQ7hvvzC8-Bi952s56Sn4edlOKVITuATpE2sqEPqY,481
|
|
74
|
+
pyinfra/facts/yum.py,sha256=h255QEH8VcQTCVdkjwikyk-Pxqzh-dl3Og6a0nMmyVE,827
|
|
75
|
+
pyinfra/facts/zypper.py,sha256=O3qoRRh6F6NUP1kEJQ3hE_VJ6C5E8wHPIqZnBthsQcM,766
|
|
76
|
+
pyinfra/facts/util/__init__.py,sha256=f7HKu8z9_yFC899ajJ3RFiyivioaZeGfOI6nf9GviCs,521
|
|
77
|
+
pyinfra/facts/util/databases.py,sha256=EphGQApzRBXI2nG1FL9h8bozY-o4SgdQgpv9YcnCkxs,730
|
|
78
|
+
pyinfra/facts/util/packaging.py,sha256=KF1geTb-C9zs_O1oUfAKpdJCktQJCbvChjeLg6yXzFc,1090
|
|
79
|
+
pyinfra/facts/util/win_files.py,sha256=S_IQ5kJD6ZgkEcVHajgh7BIMolLV-1q1ghIcwAS-E1Q,2561
|
|
80
|
+
pyinfra/operations/__init__.py,sha256=SOcW337KXIzD_LH-iJJfq14BQcCs5JzwswJ0PIzDgF4,357
|
|
81
|
+
pyinfra/operations/apk.py,sha256=WEyNHQ1uU-DgtV4xUbPFCLA5ID4JE22d2gHZvrnJrYY,2049
|
|
82
|
+
pyinfra/operations/apt.py,sha256=8wv1otDMW3DAWY-Ox6IRIvPKdLLpQJnb0EN8eFhxXi0,13526
|
|
83
|
+
pyinfra/operations/brew.py,sha256=aE-t72NdDHssjvabYxtLfnGlk22OkQhPHrO6BnMgtdI,5040
|
|
84
|
+
pyinfra/operations/bsdinit.py,sha256=HtBJERhSiBPaTG0H-m4CG6SY_7iCkl0LtHLGYuNYhVM,1578
|
|
85
|
+
pyinfra/operations/cargo.py,sha256=wcEhQEz02e6_WGL6ve_bW1IOrnHQqOGzhyMiMjmm0co,1042
|
|
86
|
+
pyinfra/operations/choco.py,sha256=Qr2lg471XiIhMJ4QvUbmRMNCP-3BNE4VbxNaJE-JjzU,1453
|
|
87
|
+
pyinfra/operations/dnf.py,sha256=qN9xwLzSFOOJwuUSDhRLTE2TdaNB58HYgtKZMHVn494,5550
|
|
88
|
+
pyinfra/operations/files.py,sha256=9I5c823Y4hoAsXVHcAK5TixV8fMIbHGOJEzOBPxi1Fc,52485
|
|
89
|
+
pyinfra/operations/gem.py,sha256=vEGYFniRGrxll8ARNauZQdSPjSHP8-me4UEH1srK-q0,1070
|
|
90
|
+
pyinfra/operations/git.py,sha256=mxK2q8Hl3xmo27qz9cRCzVvNxK9UPeG3YFh4cV5fSSM,11543
|
|
91
|
+
pyinfra/operations/iptables.py,sha256=moaeEfjrPLHZSiq6vgVRCTXE9191aKF5WlGccHywO9k,9009
|
|
92
|
+
pyinfra/operations/launchd.py,sha256=i5oeCEekOEQTVlNlayQO057DRXT103H3tWRwp8IRVko,1164
|
|
93
|
+
pyinfra/operations/lxd.py,sha256=pcdvmxfG6Bm8m_cuF1wRpmpaUzTq2nTd6iOf4jDRicA,1639
|
|
94
|
+
pyinfra/operations/mysql.py,sha256=wtuUi9IhPaehe3qSFf_woEUpPD8mASAIisdIYbnNy3c,19141
|
|
95
|
+
pyinfra/operations/npm.py,sha256=PyQJ2DQ_u0jclHNLL21ltUV64VPhC9rriGv5HOc75zY,1404
|
|
96
|
+
pyinfra/operations/openrc.py,sha256=eta2j16uC24ZHFBB1CVgV1BdzuvY7S5JjcyGA_iVyYw,1510
|
|
97
|
+
pyinfra/operations/pacman.py,sha256=qPtgIzH0151qhmxzoT4rz5xunffNOICcscknCkzLr8o,1672
|
|
98
|
+
pyinfra/operations/pip.py,sha256=jvUBAalQnFtZFDL5dqSOnBjAWEgzIGQNxHLMPUMvT3Y,5699
|
|
99
|
+
pyinfra/operations/pkg.py,sha256=sLa3-_YoRMkGNdCovduaZwtAcuADDdaeiKWnIHDiq_k,2222
|
|
100
|
+
pyinfra/operations/pkgin.py,sha256=hL_l9kN7Dn68CwPd2efrcJoa2KOToTHLhMpi1P8k3oQ,1930
|
|
101
|
+
pyinfra/operations/postgres.py,sha256=ASCPx_WZLk31sZUXHbP_CT5Xr2xz6KwnV-EG6xzPSIo,9152
|
|
102
|
+
pyinfra/operations/postgresql.py,sha256=79i5q3mtFVl3-B8V2FGLmy1n_O5A5i5BCf-ncp90UAI,797
|
|
103
|
+
pyinfra/operations/puppet.py,sha256=EOT4RnYro9K6N_HrPvYHd3bZX8rcAQxPNfLcuzm-LqE,797
|
|
104
|
+
pyinfra/operations/python.py,sha256=lQ8lAwy-d_Gg9PVuZVn9-Dl3r5K_XfyUeRKZwekHiuI,1909
|
|
105
|
+
pyinfra/operations/selinux.py,sha256=v9Wt1-uLButowbNP8iSEYXSXMd7xAsGp6U9EBXUq5sw,5347
|
|
106
|
+
pyinfra/operations/server.py,sha256=evcQgux6fAU5v9z1XUr7ELob2t8HI9n70U5mi0iYm5k,35710
|
|
107
|
+
pyinfra/operations/snap.py,sha256=_K-0UdketVIJMe3VlvfvnKGd6NM_3PC-ZzZeeMiGHME,2987
|
|
108
|
+
pyinfra/operations/ssh.py,sha256=qrU13gmR-XUcT7l7PvRDfU6WhmfOXd50DZKSZASIyiE,5493
|
|
109
|
+
pyinfra/operations/systemd.py,sha256=EpQqLNo9P6tnBdre7E7X2UuL-CeK8YJ1wwgr8cKKe5s,3818
|
|
110
|
+
pyinfra/operations/sysvinit.py,sha256=cAtfKmGZ0T1HxF0KNTLEU-CrS97n1Vpby58jB3S1Eho,4003
|
|
111
|
+
pyinfra/operations/upstart.py,sha256=1lM09OBzH0vWylCHEA_zZPOv_x5W8DVKpnlAd-km7Rc,1908
|
|
112
|
+
pyinfra/operations/vzctl.py,sha256=konF-T1KyqZaltRK9BMoUGse8TQb89J2Xbn3kcXh1uM,3010
|
|
113
|
+
pyinfra/operations/xbps.py,sha256=vuWwPUqYRIX9kcmg37KjZdtTJUYenG1J8KYFKkIiles,1446
|
|
114
|
+
pyinfra/operations/yum.py,sha256=3H6j7gq0ME-u1rBFjV5r3Q4CZErsaAlbLeK6ipuvv8U,5543
|
|
115
|
+
pyinfra/operations/zypper.py,sha256=ZZz01tViqVoO185kIJfNj_0H4dnZgRhqFxgCKOH1xXQ,5494
|
|
116
|
+
pyinfra/operations/util/__init__.py,sha256=ZAHjeCXtLo0TIOSfZ9h0Sh5IXXRCspfHs3RR1l8tQCE,366
|
|
117
|
+
pyinfra/operations/util/files.py,sha256=UwuaGH8_g_glC4QW3LKH7MrzoBpQJ8mk11_g_rk9a8c,3339
|
|
118
|
+
pyinfra/operations/util/packaging.py,sha256=fNQaLRtGVrEWFqz2pRAB2nvc1rE7Xd29sXJClzZAChg,8300
|
|
119
|
+
pyinfra/operations/util/service.py,sha256=eT_-3r1Lc0aNsNI0p-ocPGjoMfsdcDADqHU82T7GKFE,1031
|
|
120
|
+
pyinfra_cli/__init__.py,sha256=G0X7tNdqT45uWuK3aHIKxMdDeCgJ7zHo6vbxoG6zy_8,284
|
|
121
|
+
pyinfra_cli/__main__.py,sha256=8tjq8HUll8P8naFw7pGlygwSz7u9je_MQ-0pqcDlENY,881
|
|
122
|
+
pyinfra_cli/commands.py,sha256=J-mCJYvDebJ8M7o3HreB2zToa871-xO6_KjVhPLeHho,1832
|
|
123
|
+
pyinfra_cli/exceptions.py,sha256=b14C3xZ6PMqe1q-XosozPNhbABVIAdeivWoTdBn77ZE,4953
|
|
124
|
+
pyinfra_cli/inventory.py,sha256=mgj_T_T-lCy6Diyb466doRKIcz4zXLhRJi3ui_VBlXM,9513
|
|
125
|
+
pyinfra_cli/log.py,sha256=7WEGtmf3ncF1BtXL2icUjyxeRKy-7XrCcQ2Hg4GWX5Y,2201
|
|
126
|
+
pyinfra_cli/main.py,sha256=MsBn0RCD5ce4GY-dDBe6vLXT0LanDrrQZpJOTIYZPBs,19715
|
|
127
|
+
pyinfra_cli/prints.py,sha256=MGU8DvHGiE4ZRVPee1Mixia6VWB3zn0OWn7FwTASWpc,9006
|
|
128
|
+
pyinfra_cli/util.py,sha256=7z6xg1GtbD_lB40yLL_m2EwGVTly0Z7V8oeAdQXnKi0,6322
|
|
129
|
+
pyinfra_cli/virtualenv.py,sha256=6j9W54JkQLN02SrZZIVwszp0GxlaaDEUWFZjBDHIWNA,2466
|
|
130
|
+
tests/test_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
131
|
+
tests/test_api/test_api.py,sha256=Ig2ebkNACYbHcC4_zRkxS9vj5ZEogoPqGx30ErIKChg,2413
|
|
132
|
+
tests/test_api/test_api_arguments.py,sha256=5k7w0_x5cnABEFOk0LQBCt5gU9iTN9lo2XS6MlJTnhQ,1961
|
|
133
|
+
tests/test_api/test_api_command.py,sha256=OW0ESMyS5vo38u17DHeCrSIaIkW9gMU5PSkXL7mRrq0,3204
|
|
134
|
+
tests/test_api/test_api_config.py,sha256=bf0mDrUie3On6zGC_hJBpv-wvSf3LHBIBzUDvkopEt0,708
|
|
135
|
+
tests/test_api/test_api_deploys.py,sha256=h_zbI6CK4K8SdzEr3LEAMPxOf9hnQBdi_suqiNPqHHQ,4200
|
|
136
|
+
tests/test_api/test_api_facts.py,sha256=fUPadZbZ5xaKSF-kmLj7XGwsNiBmfj7Av0gl8fE01Qc,10687
|
|
137
|
+
tests/test_api/test_api_host.py,sha256=U_VW2vTl35vR8EdyIGMKr4y0ydsDLbvHSjZDa99CyNE,1119
|
|
138
|
+
tests/test_api/test_api_inventory.py,sha256=VLbV0MXdRLOPvTXJF156ne6rAx1cBlFfgq_1S79s4tw,2013
|
|
139
|
+
tests/test_api/test_api_operations.py,sha256=OqLA-d5i-3FWu4rx6Hj_IyjKEp5wrqQ4za1tNQFPJRs,20144
|
|
140
|
+
tests/test_api/test_api_util.py,sha256=uHv4oLpoy1_tzOoqFA1zpdvC74SvjitZbxQwp0dmjTs,1716
|
|
141
|
+
tests/test_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
142
|
+
tests/test_cli/test_cli.py,sha256=nZQH0zK1SOgIr5VxBuuHH68hyzG4lhwyw_Z7EhjPtf4,6045
|
|
143
|
+
tests/test_cli/test_cli_deploy.py,sha256=KBnnDsiD21h7t1S2JXpEDpiMxh0AFqwxaEl0z78IE9E,4858
|
|
144
|
+
tests/test_cli/test_cli_exceptions.py,sha256=02sjC6rMptuqchgcdjdsVNQbSQYW6HwGutSy6Q6sMs4,3088
|
|
145
|
+
tests/test_cli/test_cli_util.py,sha256=-Ehnj0cO-EkF-6KLxcPPcFeuAUMTz-fKITrxhuiYhV4,2562
|
|
146
|
+
tests/test_cli/test_context_objects.py,sha256=JiUTwQP7yvcqA47Kq9jtdsB_Z8nxGMZN46d9pR--FYA,2130
|
|
147
|
+
tests/test_cli/util.py,sha256=kp_-XsGnTyDgG6IHWorYzl5VD_WLe77dKOH007TDOUE,338
|
|
148
|
+
tests/test_connectors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
149
|
+
tests/test_connectors/test_chroot.py,sha256=QK7YgFPXzHh8y363-tmHvzZ0Ok5PVJWFTDAvwt91eac,5907
|
|
150
|
+
tests/test_connectors/test_docker.py,sha256=0EjkfhCHpLCfL4X-AIdMNw5ASaseY0tbRAn7T_TAkMQ,6566
|
|
151
|
+
tests/test_connectors/test_dockerssh.py,sha256=MaC9IK1OZDiqoIsuLOZBJnPDglsMoPDoL19LQtXsyCE,9303
|
|
152
|
+
tests/test_connectors/test_local.py,sha256=N_FkejDZKu7XLnKeApqfBARYMyxf-hRXCQJrXLHvwRg,7442
|
|
153
|
+
tests/test_connectors/test_ssh.py,sha256=6YPdNv_h12hn6C7Gksuyflf3V0cdvlc8o4e8oWBv-iM,38399
|
|
154
|
+
tests/test_connectors/test_sshuserclient.py,sha256=2PQNLPhNL6lBACc6tQuXmPoog-9L6AdDQNrA-rEw1_8,5734
|
|
155
|
+
tests/test_connectors/test_terraform.py,sha256=Z5MhgDeRDFumu-GlbjMD0ZRkecwBIPP8C8ZVg-mq7C8,3743
|
|
156
|
+
tests/test_connectors/test_util.py,sha256=hQir0WyjH0LEF6xvIyHNyqdI5pkJX6qUR9287MgO2bY,4647
|
|
157
|
+
tests/test_connectors/test_vagrant.py,sha256=_MBX2b7I-FlEX4rcKeaEcJBSmpCtxxcwJN-7yY_Ivbk,3646
|
|
158
|
+
pyinfra-3.0b1.dist-info/LICENSE.md,sha256=gwC95tUll0gwB32tHNkTAasN7Sb6vjWzXa305NwClbI,1076
|
|
159
|
+
pyinfra-3.0b1.dist-info/METADATA,sha256=w4CVwxaxwspgoqLhaa04KKS3Ge8FcQj8lixIoQ9mUPc,8168
|
|
160
|
+
pyinfra-3.0b1.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
|
|
161
|
+
pyinfra-3.0b1.dist-info/entry_points.txt,sha256=BraEFyquy05M8ch33HZXOHoH_m2BTqejL3xX3NrpzOM,471
|
|
162
|
+
pyinfra-3.0b1.dist-info/top_level.txt,sha256=2K6D1mK35JTSEBgOfEPV-N-uA2SDErxGiE0J-HUMMVI,26
|
|
163
|
+
pyinfra-3.0b1.dist-info/RECORD,,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
[console_scripts]
|
|
2
|
+
pyinfra = pyinfra_cli.__main__:execute_pyinfra
|
|
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
|
+
ssh = pyinfra.connectors.ssh:SSHConnector
|
|
10
|
+
terraform = pyinfra.connectors.terraform:TerraformInventoryConnector
|
|
11
|
+
vagrant = pyinfra.connectors.vagrant:VagrantInventoryConnector
|