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