Fabric: `рд╕рдВрджрд░реНрдн.рдкреБрдЯ` рдлрд╝рд╛рдЗрд▓ рдореЗрдВ `рд╕реБрдбреЛ` рдХреЗ рд╕рд╛рде рдЕрдХреНрд╖рдоред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдордИ 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: fabric/fabric

v2 рдореЗрдВ, use_sudo=True рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдм рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
рдЕрдЧрд░ рдореИрдВ рджреВрд░рд╕реНрде рд╣реЛрд╕реНрдЯ рдкрд░ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ:

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

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@geoffrey-eisenbarth рдлрд┐рд▓рд╣рд╛рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ "рдзрдиреНрдп" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рд╣реИ - http://www.fabfile.org/upgrading.html#file -transfer рдХреЗ рддрд╣рдд рд╕реВрдбреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рджреЗрдЦреЗрдВ

рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреИрд╕реЗ

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

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ http://docs.fabfile.org/en/latest/upgrading.html#id15 рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рд╕рд┐рдВрдЧрд▓-рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк c.sudo("install тАж /dev/stdin /path/to/remote") рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ sudo() рдореЗрдВ рдПрдХ рдмрдЧ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ tee рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ

рдпрд╣рд╛рдБ рдореИрдВ рдЕрд╕реНрдерд╛рдпреА-рдлрд╝рд╛рдЗрд▓ рдиреГрддреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдЬреЛ рдпрдХреАрдирди рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗ:

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}')

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛

<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")

рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╣реЛрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рдорд╛рд░реНрдЧ рд╣реИ?

рдлреИрдмреНрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ, рдХрд╣рддреЗ рд╣реИрдВ, /etc/nginx/? рдореИрдВ upload_template рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлрд╝реИрдмреНрд░рд┐рдХ 2 рддрд░реАрдХрд╛ рдвреВрдВрдврдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@geoffrey-eisenbarth рдлрд┐рд▓рд╣рд╛рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ "рдзрдиреНрдп" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рд╣реИ - http://www.fabfile.org/upgrading.html#file -transfer рдХреЗ рддрд╣рдд рд╕реВрдбреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рджреЗрдЦреЗрдВ

рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреИрд╕реЗ

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
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

acdha picture acdha  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

joeydumont picture joeydumont  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bitprophet picture bitprophet  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

supriyopaul picture supriyopaul  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

neemxyang picture neemxyang  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ