Как скопировать каталог на удаленную машину с помощью Fabric?



у меня есть каталог на моей локальной машине, который я хотел бы скопировать на удаленную машину (и переименовать ее) с помощью Fabric. Я знаю, что могу скопировать файл с помощью put(), а как насчет каталога. Я знаю, что это достаточно легко с помощью scp, но я бы предпочел сделать это в пределах моего fabfile.py если это возможно.

358   2  

2 ответов:

можно использовать put для этого также (по крайней мере, в 1.0.0):

local_path может быть относительным или абсолютным локальным файлом или путь к каталогу и могут содержать подстановочные знаки в стиле оболочки, как понимает питон Глоб. Расширение Тильды (как реализовано ОС.путь.expanduser) также выполняется.

посмотреть: http://docs.fabfile.org/en/1.0.0/api/core/operations.html#fabric.operations.put


обновление: этот пример отлично работает (для меня) на 1.0.0.:

from fabric.api import env
from fabric.operations import run, put

env.hosts = ['[email protected]']

def copy():
    # make sure the directory is there!
    run('mkdir -p /home/frodo/tmp')

    # our local 'testdirectory' - it may contain files or subdirectories ...
    put('testdirectory', '/home/frodo/tmp')

# [[email protected]] Executing task 'copy'
# [[email protected]] run: mkdir -p /home/frodo/tmp
# [[email protected]] put: testdirectory/HELLO -> \
#     /home/frodo/tmp/testdirectory/HELLO
# [[email protected]] put: testdirectory/WORLD -> \
#     /home/frodo/tmp/testdirectory/WORLD
# ...

Я бы также посмотрел на модуль инструментов проекта: ткань.ВНО.проект документация

это upload_project функции, которая принимает исходный и целевой каталог. Еще лучше, есть rsync_project функция, которая использует rsync. Это хорошо, потому что он обновляет только файлы, которые изменились, и он принимает дополнительные аргументы, такие как "исключить", что хорошо для таких вещей, как исключение вашего .

например:

from fabric.contrib.project import rsync_project

def _deploy_ec2(loc):

    rsync_project(local_dir=loc, remote_dir='/var/www', exclude='.git')

Comments

    Ничего не найдено.