pyinfra 3.0b1__py2.py3-none-any.whl → 3.0b3__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/arguments.py +9 -3
- pyinfra/api/arguments_typed.py +8 -5
- pyinfra/api/command.py +5 -3
- pyinfra/api/config.py +115 -13
- pyinfra/api/connectors.py +5 -2
- pyinfra/api/facts.py +33 -32
- pyinfra/api/host.py +5 -5
- pyinfra/api/inventory.py +4 -0
- pyinfra/api/operation.py +22 -14
- pyinfra/api/util.py +24 -16
- pyinfra/connectors/base.py +3 -6
- pyinfra/connectors/docker.py +2 -9
- pyinfra/connectors/local.py +2 -2
- pyinfra/connectors/ssh.py +2 -2
- pyinfra/connectors/util.py +6 -7
- pyinfra/connectors/vagrant.py +5 -5
- pyinfra/context.py +1 -0
- pyinfra/facts/apk.py +2 -0
- pyinfra/facts/apt.py +2 -0
- pyinfra/facts/brew.py +2 -0
- pyinfra/facts/bsdinit.py +2 -0
- pyinfra/facts/cargo.py +2 -0
- pyinfra/facts/choco.py +2 -0
- pyinfra/facts/deb.py +7 -2
- pyinfra/facts/dnf.py +2 -0
- pyinfra/facts/docker.py +18 -0
- pyinfra/facts/files.py +2 -0
- pyinfra/facts/gem.py +2 -0
- pyinfra/facts/gpg.py +2 -0
- pyinfra/facts/hardware.py +30 -22
- pyinfra/facts/launchd.py +2 -0
- pyinfra/facts/lxd.py +2 -0
- pyinfra/facts/mysql.py +12 -6
- pyinfra/facts/npm.py +1 -0
- pyinfra/facts/openrc.py +2 -0
- pyinfra/facts/pacman.py +6 -2
- pyinfra/facts/pip.py +2 -0
- pyinfra/facts/pkg.py +2 -0
- pyinfra/facts/pkgin.py +2 -0
- pyinfra/facts/postgres.py +6 -6
- pyinfra/facts/postgresql.py +2 -0
- pyinfra/facts/rpm.py +12 -9
- pyinfra/facts/runit.py +68 -0
- pyinfra/facts/server.py +10 -13
- pyinfra/facts/snap.py +2 -0
- pyinfra/facts/systemd.py +2 -0
- pyinfra/facts/upstart.py +2 -0
- pyinfra/facts/util/packaging.py +3 -2
- pyinfra/facts/vzctl.py +2 -0
- pyinfra/facts/xbps.py +2 -0
- pyinfra/facts/yum.py +2 -0
- pyinfra/facts/zypper.py +2 -0
- pyinfra/operations/apk.py +3 -1
- pyinfra/operations/apt.py +16 -18
- pyinfra/operations/brew.py +10 -8
- pyinfra/operations/bsdinit.py +5 -3
- pyinfra/operations/cargo.py +3 -1
- pyinfra/operations/choco.py +3 -1
- pyinfra/operations/dnf.py +15 -19
- pyinfra/operations/docker.py +339 -0
- pyinfra/operations/files.py +81 -66
- pyinfra/operations/gem.py +3 -1
- pyinfra/operations/git.py +18 -16
- pyinfra/operations/iptables.py +27 -25
- pyinfra/operations/launchd.py +5 -6
- pyinfra/operations/lxd.py +7 -4
- pyinfra/operations/mysql.py +57 -53
- pyinfra/operations/npm.py +8 -1
- pyinfra/operations/openrc.py +5 -3
- pyinfra/operations/pacman.py +4 -5
- pyinfra/operations/pip.py +11 -9
- pyinfra/operations/pkg.py +3 -1
- pyinfra/operations/pkgin.py +3 -1
- pyinfra/operations/postgres.py +39 -37
- pyinfra/operations/postgresql.py +2 -0
- pyinfra/operations/puppet.py +3 -1
- pyinfra/operations/python.py +7 -3
- pyinfra/operations/runit.py +182 -0
- pyinfra/operations/selinux.py +42 -16
- pyinfra/operations/server.py +52 -43
- pyinfra/operations/snap.py +3 -1
- pyinfra/operations/ssh.py +12 -10
- pyinfra/operations/systemd.py +12 -8
- pyinfra/operations/sysvinit.py +6 -4
- pyinfra/operations/upstart.py +5 -3
- pyinfra/operations/util/docker.py +177 -0
- pyinfra/operations/util/files.py +24 -16
- pyinfra/operations/util/packaging.py +53 -37
- pyinfra/operations/util/service.py +25 -18
- pyinfra/operations/vzctl.py +12 -10
- pyinfra/operations/xbps.py +3 -1
- pyinfra/operations/yum.py +14 -18
- pyinfra/operations/zypper.py +8 -9
- pyinfra/version.py +5 -2
- {pyinfra-3.0b1.dist-info → pyinfra-3.0b3.dist-info}/METADATA +30 -28
- pyinfra-3.0b3.dist-info/RECORD +167 -0
- {pyinfra-3.0b1.dist-info → pyinfra-3.0b3.dist-info}/WHEEL +1 -1
- pyinfra_cli/exceptions.py +0 -5
- pyinfra_cli/inventory.py +38 -19
- pyinfra_cli/prints.py +15 -11
- pyinfra_cli/util.py +3 -1
- tests/test_api/test_api_operations.py +1 -1
- tests/test_connectors/test_ssh.py +66 -13
- tests/test_connectors/test_vagrant.py +3 -3
- pyinfra-3.0b1.dist-info/RECORD +0 -163
- {pyinfra-3.0b1.dist-info → pyinfra-3.0b3.dist-info}/LICENSE.md +0 -0
- {pyinfra-3.0b1.dist-info → pyinfra-3.0b3.dist-info}/entry_points.txt +0 -0
- {pyinfra-3.0b1.dist-info → pyinfra-3.0b3.dist-info}/top_level.txt +0 -0
pyinfra_cli/prints.py
CHANGED
|
@@ -237,17 +237,21 @@ def print_meta(state: "State"):
|
|
|
237
237
|
logger.info,
|
|
238
238
|
[
|
|
239
239
|
pretty_op_name(state.op_meta[op_hash]),
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
240
|
+
(
|
|
241
|
+
"-"
|
|
242
|
+
if len(hosts_in_op) == 0
|
|
243
|
+
else "{0} ({1})".format(
|
|
244
|
+
len(hosts_in_op),
|
|
245
|
+
truncate(", ".join(sorted(hosts_in_op)), 48),
|
|
246
|
+
)
|
|
245
247
|
),
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
248
|
+
(
|
|
249
|
+
"-"
|
|
250
|
+
if len(hosts_maybe_in_op) == 0
|
|
251
|
+
else "{0} ({1})".format(
|
|
252
|
+
len(hosts_maybe_in_op),
|
|
253
|
+
truncate(", ".join(sorted(hosts_maybe_in_op)), 48),
|
|
254
|
+
)
|
|
251
255
|
),
|
|
252
256
|
],
|
|
253
257
|
)
|
|
@@ -273,7 +277,7 @@ def print_results(state: "State"):
|
|
|
273
277
|
hosts_in_op += 1
|
|
274
278
|
|
|
275
279
|
op_meta = state.ops[host][op_hash].operation_meta
|
|
276
|
-
if op_meta.did_succeed():
|
|
280
|
+
if op_meta.did_succeed(_raise_if_not_complete=False):
|
|
277
281
|
if op_meta._did_change():
|
|
278
282
|
hosts_in_op_success.append(host.name)
|
|
279
283
|
else:
|
pyinfra_cli/util.py
CHANGED
|
@@ -154,9 +154,11 @@ def try_import_module_attribute(path, prefix=None, raise_for_none=True):
|
|
|
154
154
|
if ":" in path:
|
|
155
155
|
# Allow a.module.name:function syntax
|
|
156
156
|
mod_path, attr_name = path.rsplit(":", 1)
|
|
157
|
-
|
|
157
|
+
elif "." in path:
|
|
158
158
|
# And also a.module.name.function
|
|
159
159
|
mod_path, attr_name = path.rsplit(".", 1)
|
|
160
|
+
else:
|
|
161
|
+
return None
|
|
160
162
|
|
|
161
163
|
possible_modules = [mod_path]
|
|
162
164
|
if prefix:
|
|
@@ -390,7 +390,7 @@ class TestOperationsApi(PatchSSHTestCase):
|
|
|
390
390
|
state = State(inventory, Config())
|
|
391
391
|
connect_all(state)
|
|
392
392
|
|
|
393
|
-
with patch("pyinfra.connectors.ssh.
|
|
393
|
+
with patch("pyinfra.connectors.ssh.which", lambda x: None):
|
|
394
394
|
with self.assertRaises(OperationError) as context:
|
|
395
395
|
add_op(state, files.rsync, "src", "dest")
|
|
396
396
|
|
|
@@ -500,6 +500,57 @@ class TestSSHConnector(TestCase):
|
|
|
500
500
|
get_pty=False,
|
|
501
501
|
)
|
|
502
502
|
|
|
503
|
+
@patch("pyinfra.connectors.util.getpass")
|
|
504
|
+
@patch("pyinfra.connectors.ssh.SSHClient")
|
|
505
|
+
def test_run_shell_command_sudo_password_automatic_prompt_with_special_chars_in_password(
|
|
506
|
+
self,
|
|
507
|
+
fake_ssh_client,
|
|
508
|
+
fake_getpass,
|
|
509
|
+
):
|
|
510
|
+
fake_ssh = MagicMock()
|
|
511
|
+
first_fake_stdout = MagicMock()
|
|
512
|
+
second_fake_stdout = MagicMock()
|
|
513
|
+
third_fake_stdout = MagicMock()
|
|
514
|
+
|
|
515
|
+
first_fake_stdout.__iter__.return_value = ["sudo: a password is required\r"]
|
|
516
|
+
second_fake_stdout.__iter__.return_value = ["/tmp/pyinfra-sudo-askpass-XXXXXXXXXXXX"]
|
|
517
|
+
|
|
518
|
+
fake_ssh.exec_command.side_effect = [
|
|
519
|
+
(MagicMock(), first_fake_stdout, MagicMock()), # command w/o sudo password
|
|
520
|
+
(MagicMock(), second_fake_stdout, MagicMock()), # SUDO_ASKPASS_COMMAND
|
|
521
|
+
(MagicMock(), third_fake_stdout, MagicMock()), # command with sudo pw
|
|
522
|
+
]
|
|
523
|
+
|
|
524
|
+
fake_ssh_client.return_value = fake_ssh
|
|
525
|
+
fake_getpass.return_value = "p@ss'word';"
|
|
526
|
+
|
|
527
|
+
inventory = make_inventory(hosts=("somehost",))
|
|
528
|
+
State(inventory, Config())
|
|
529
|
+
host = inventory.get_host("somehost")
|
|
530
|
+
host.connect()
|
|
531
|
+
|
|
532
|
+
command = "echo Šablony"
|
|
533
|
+
first_fake_stdout.channel.recv_exit_status.return_value = 1
|
|
534
|
+
second_fake_stdout.channel.recv_exit_status.return_value = 0
|
|
535
|
+
third_fake_stdout.channel.recv_exit_status.return_value = 0
|
|
536
|
+
|
|
537
|
+
out = host.run_shell_command(command, _sudo=True, print_output=True)
|
|
538
|
+
assert len(out) == 2
|
|
539
|
+
|
|
540
|
+
status, output = out
|
|
541
|
+
assert status is True
|
|
542
|
+
|
|
543
|
+
fake_ssh.exec_command.assert_any_call(("sudo -H -n sh -c 'echo Šablony'"), get_pty=False)
|
|
544
|
+
|
|
545
|
+
fake_ssh.exec_command.assert_called_with(
|
|
546
|
+
(
|
|
547
|
+
"env SUDO_ASKPASS=/tmp/pyinfra-sudo-askpass-XXXXXXXXXXXX "
|
|
548
|
+
"""PYINFRA_SUDO_PASSWORD='p@ss'"'"'word'"'"';' """
|
|
549
|
+
"sudo -H -A -k sh -c 'echo Šablony'"
|
|
550
|
+
),
|
|
551
|
+
get_pty=False,
|
|
552
|
+
)
|
|
553
|
+
|
|
503
554
|
# SSH file put/get tests
|
|
504
555
|
#
|
|
505
556
|
|
|
@@ -1003,7 +1054,7 @@ class TestSSHConnector(TestCase):
|
|
|
1003
1054
|
)
|
|
1004
1055
|
|
|
1005
1056
|
@patch("pyinfra.connectors.ssh.SSHClient")
|
|
1006
|
-
@patch("
|
|
1057
|
+
@patch("pyinfra.connectors.ssh.sleep")
|
|
1007
1058
|
def test_ssh_connect_fail_retry(self, fake_sleep, fake_ssh_client):
|
|
1008
1059
|
for exception_class in (
|
|
1009
1060
|
SSHException,
|
|
@@ -1011,6 +1062,9 @@ class TestSSHConnector(TestCase):
|
|
|
1011
1062
|
socket_error,
|
|
1012
1063
|
EOFError,
|
|
1013
1064
|
):
|
|
1065
|
+
fake_sleep.reset_mock()
|
|
1066
|
+
fake_ssh_client.reset_mock()
|
|
1067
|
+
|
|
1014
1068
|
inventory = make_inventory(
|
|
1015
1069
|
hosts=("unresposivehost",), override_data={"ssh_connect_retries": 1}
|
|
1016
1070
|
)
|
|
@@ -1019,17 +1073,16 @@ class TestSSHConnector(TestCase):
|
|
|
1019
1073
|
unresposivehost = inventory.get_host("unresposivehost")
|
|
1020
1074
|
assert unresposivehost.data.ssh_connect_retries == 1
|
|
1021
1075
|
|
|
1022
|
-
|
|
1023
|
-
fake_ssh.connect.side_effect = exception_class()
|
|
1024
|
-
fake_ssh_client.return_value = fake_ssh
|
|
1076
|
+
fake_ssh_client().connect.side_effect = exception_class()
|
|
1025
1077
|
|
|
1026
1078
|
with self.assertRaises(ConnectError):
|
|
1027
1079
|
unresposivehost.connect(show_errors=False, raise_exceptions=True)
|
|
1028
|
-
|
|
1029
|
-
|
|
1080
|
+
|
|
1081
|
+
fake_sleep.assert_called_once()
|
|
1082
|
+
assert fake_ssh_client().connect.call_count == 2
|
|
1030
1083
|
|
|
1031
1084
|
@patch("pyinfra.connectors.ssh.SSHClient")
|
|
1032
|
-
@patch("
|
|
1085
|
+
@patch("pyinfra.connectors.ssh.sleep")
|
|
1033
1086
|
def test_ssh_connect_fail_success(self, fake_sleep, fake_ssh_client):
|
|
1034
1087
|
for exception_class in (
|
|
1035
1088
|
SSHException,
|
|
@@ -1037,6 +1090,9 @@ class TestSSHConnector(TestCase):
|
|
|
1037
1090
|
socket_error,
|
|
1038
1091
|
EOFError,
|
|
1039
1092
|
):
|
|
1093
|
+
fake_sleep.reset_mock()
|
|
1094
|
+
fake_ssh_client.reset_mock()
|
|
1095
|
+
|
|
1040
1096
|
inventory = make_inventory(
|
|
1041
1097
|
hosts=("unresposivehost",), override_data={"ssh_connect_retries": 1}
|
|
1042
1098
|
)
|
|
@@ -1045,11 +1101,8 @@ class TestSSHConnector(TestCase):
|
|
|
1045
1101
|
unresposivehost = inventory.get_host("unresposivehost")
|
|
1046
1102
|
assert unresposivehost.data.ssh_connect_retries == 1
|
|
1047
1103
|
|
|
1048
|
-
|
|
1049
|
-
fake_ssh = MagicMock()
|
|
1050
|
-
fake_ssh.connect.side_effect = [exception_class(), connection]
|
|
1051
|
-
fake_ssh_client.return_value = fake_ssh
|
|
1104
|
+
fake_ssh_client().connect.side_effect = [exception_class(), MagicMock()]
|
|
1052
1105
|
|
|
1053
1106
|
unresposivehost.connect(show_errors=False, raise_exceptions=True)
|
|
1054
|
-
|
|
1055
|
-
assert fake_ssh_client.connect.
|
|
1107
|
+
fake_sleep.assert_called_once()
|
|
1108
|
+
assert fake_ssh_client().connect.call_count == 2
|
|
@@ -75,7 +75,7 @@ class TestVagrantConnector(TestCase):
|
|
|
75
75
|
(
|
|
76
76
|
"@vagrant/ubuntu16",
|
|
77
77
|
{
|
|
78
|
-
"ssh_port":
|
|
78
|
+
"ssh_port": 2222,
|
|
79
79
|
"ssh_user": "vagrant",
|
|
80
80
|
"ssh_hostname": "127.0.0.1",
|
|
81
81
|
"ssh_key": "path/to/key",
|
|
@@ -85,7 +85,7 @@ class TestVagrantConnector(TestCase):
|
|
|
85
85
|
(
|
|
86
86
|
"@vagrant/centos7",
|
|
87
87
|
{
|
|
88
|
-
"ssh_port":
|
|
88
|
+
"ssh_port": 2200,
|
|
89
89
|
"ssh_user": "vagrant",
|
|
90
90
|
"ssh_hostname": "127.0.0.1",
|
|
91
91
|
"ssh_key": "path/to/key",
|
|
@@ -109,7 +109,7 @@ class TestVagrantConnector(TestCase):
|
|
|
109
109
|
(
|
|
110
110
|
"@vagrant/ubuntu16",
|
|
111
111
|
{
|
|
112
|
-
"ssh_port":
|
|
112
|
+
"ssh_port": 2222,
|
|
113
113
|
"ssh_user": "vagrant",
|
|
114
114
|
"ssh_hostname": "127.0.0.1",
|
|
115
115
|
"ssh_key": "path/to/key",
|
pyinfra-3.0b1.dist-info/RECORD
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|