En v2, le paramètre use_sudo=True
n'existe plus.
Si j'essaie de copier un fichier sur l'hôte distant, voici ce que j'obtiens :
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
Ceci est documenté dans http://docs.fabfile.org/en/latest/upgrading.html#id15. Il ne semble pas y avoir de bon remplacement de commande unique pour cela - par exemple, vous ne pouvez pas utiliser c.sudo("install … /dev/stdin /path/to/remote")
- et il semble y avoir un bogue dans sudo()
qui empêche l'utilisation de tee
(il ne se termine jamais et laisse simplement la commande en attente d'entrée).
Voici ce que j'ai utilisé pour faire la danse des fichiers temporaires, ce que vous devriez toujours faire de toute façon pour éviter de laisser des fichiers avec des autorisations involontaires :
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}')
Invoqué comme par exemple
<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")
S'agit-il de la route à utiliser lors de la tentative de copie d'un fichier local sur un serveur distant en dehors du répertoire personnel de l'utilisateur ?
Quelle est la manière prévue d'utiliser Fabric et de copier un fichier dans, par exemple, /etc/nginx/? J'essaie de trouver le moyen fabric2 d'utiliser upload_template
etc.
@geoffrey-eisenbarth Pour le moment, il n'y a pas d'approche "bénie" pour cela - voir le peu sur sudo sous http://www.fabfile.org/upgrading.html#file -transfer
Pour l'instant, vous voudriez faire quelque chose de basique comme
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
Commentaire le plus utile
@geoffrey-eisenbarth Pour le moment, il n'y a pas d'approche "bénie" pour cela - voir le peu sur sudo sous http://www.fabfile.org/upgrading.html#file -transfer
Pour l'instant, vous voudriez faire quelque chose de basique comme