In v2 existiert der Parameter use_sudo=True
nicht mehr.
Wenn ich versuche, eine Datei auf dem Remote-Host zu kopieren, erhalte ich Folgendes:
Traceback (most recent call last):
File "env/bin/fab", line 9, in <module>
load_entry_point('fabric==2.0.0', 'console_scripts', 'fab')()
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/invoke/program.py", line 332, in run
self.execute()
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/invoke/program.py", line 480, in execute
executor.execute(*self.tasks)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/invoke/executor.py", line 133, in execute
result = call.task(*args, **call.kwargs)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/invoke/tasks.py", line 127, in __call__
result = self.body(*args, **kwargs)
File "/home/tim/Workspace/wintest/fabfile.py", line 131, in nginx
context.put(StringIO(nginx_conf), remote='/etc/nginx/sites-enabled/website')
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/fabric/connection.py", line 639, in put
return Transfer(self).put(*args, **kwargs)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/fabric/transfer.py", line 213, in put
sftp.putfo(fl=local, remotepath=remote)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/paramiko/sftp_client.py", line 683, in putfo
with self.file(remotepath, 'wb') as fr:
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/paramiko/sftp_client.py", line 341, in open
t, msg = self._request(CMD_OPEN, filename, imode, attrblock)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/paramiko/sftp_client.py", line 780, in _request
return self._read_response(num)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/paramiko/sftp_client.py", line 832, in _read_response
self._convert_status(msg)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/paramiko/sftp_client.py", line 863, in _convert_status
raise IOError(errno.EACCES, text)
PermissionError: [Errno 13] Permission denied
Dies ist in http://docs.fabfile.org/en/latest/upgrading.html#id15 dokumentiert. Es scheint keinen guten Einzelbefehl-Ersatz dafür zu geben – z. B. können Sie c.sudo("install … /dev/stdin /path/to/remote")
nicht verwenden – und es scheint einen Fehler in sudo()
zu geben, der die Verwendung von tee
verhindert.
Hier ist, was ich verwendet habe, um den Tanz der temporären Datei zu machen, was Sie wohl sowieso immer tun sollten, um zu vermeiden, dass Dateien mit unbeabsichtigten Berechtigungen hinterlassen werden:
def sudo_install(connection, source, dest, *, owner='root', group='root', mode='0600'):
"""
Helper which installs a file with arbitrary permissions and ownership
This is a replacement for Fabric 1's `put(…, use_sudo=True)` and adds the
ability to set the expected ownership and permissions in one operation.
"""
mktemp_result = connection.run('mktemp', hide='out')
assert mktemp_result.ok
temp_file = mktemp_result.stdout.strip()
try:
connection.put(source, temp_file)
connection.sudo(f'install -o {owner} -g {group} -m {mode} {temp_file} {dest}')
finally:
connection.run(f'rm {temp_file}')
Aufgerufen als zB
<strong i="14">@task</strong>
def install_mount_status_monitor(conn):
sudo_install(conn, override_file, "/etc/systemd/system/mount_status_monitor.service.d/override.conf")
Ist dies die erwartete Route, wenn versucht wird, eine lokale Datei auf einen Remoteserver außerhalb des Home-Verzeichnisses des Benutzers zu kopieren?
Wie soll Fabric verwendet und eine Datei beispielsweise nach /etc/nginx/? kopiert werden? Ich versuche, die Art und Weise von fabric2 zu finden, upload_template
usw. zu verwenden.
@geoffrey-eisenbarth Im Moment gibt es dafür keinen "gesegneten" Ansatz - siehe den Abschnitt über sudo unter http://www.fabfile.org/upgrading.html#file -transfer
Im Moment möchten Sie etwas Grundlegendes tun, wie z
c.put("path/to/local/nginx.conf") # implicit to remote $HOME
c.sudo("mv nginx.conf /etc/nginx/") # again implicitly with a CWD of $HOME
Hilfreichster Kommentar
@geoffrey-eisenbarth Im Moment gibt es dafür keinen "gesegneten" Ansatz - siehe den Abschnitt über sudo unter http://www.fabfile.org/upgrading.html#file -transfer
Im Moment möchten Sie etwas Grundlegendes tun, wie z