Di v2, parameter use_sudo=True
tidak ada lagi.
Jika saya mencoba menyalin file di Host jarak jauh, inilah yang saya dapatkan:
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
Ini didokumentasikan di http://docs.fabfile.org/en/latest/upgrading.html#id15. Tampaknya tidak ada pengganti perintah tunggal yang bagus untuk ini – misalnya Anda tidak dapat menggunakan c.sudo("install … /dev/stdin /path/to/remote")
– dan tampaknya ada bug di sudo()
yang mencegah penggunaan tee
(tidak pernah berakhir dan hanya membiarkan perintah menggantung menunggu input).
Inilah yang saya gunakan untuk melakukan tarian file-temp, yang bisa dibilang apa yang harus selalu Anda lakukan untuk menghindari meninggalkan file dengan izin yang tidak diinginkan:
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}')
Dipanggil sebagai misalnya
<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")
Apakah ini rute yang diharapkan untuk digunakan ketika mencoba menyalin file lokal ke server jauh di luar direktori home pengguna?
Apa cara yang dimaksudkan untuk menggunakan Fabric dan menyalin file ke, katakanlah, /etc/nginx/? Saya mencoba menemukan cara fabric2 menggunakan upload_template
dll.
@geoffrey-eisenbarth Saat ini tidak ada pendekatan "diberkati" untuk ini - lihat sedikit tentang Sudo di bawah http://www.fabfile.org/upgrading.html#file -transfer
Untuk saat ini, Anda ingin melakukan sesuatu yang mendasar seperti
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
Komentar yang paling membantu
@geoffrey-eisenbarth Saat ini tidak ada pendekatan "diberkati" untuk ini - lihat sedikit tentang Sudo di bawah http://www.fabfile.org/upgrading.html#file -transfer
Untuk saat ini, Anda ingin melakukan sesuatu yang mendasar seperti