python - ruta - ¿Cómo copio un directorio a una máquina remota usando Fabric?
python directorio actual (2)
Tengo un directorio en mi máquina local que me gustaría copiar a una máquina remota (y cambiarle el nombre) usando Fabric. Sé que puedo copiar el archivo usando put()
, pero ¿qué pasa con un directorio? Sé que es bastante fácil usar scp , pero preferiría hacerlo desde mi fabfile.py
si es posible.
Puede usar put
para eso también (al menos en 1.0.0):
local_path
puede ser una ruta de directorio o archivo local relativa o absoluta, y puede contener comodines de estilo de shell , tal como lo entiende el módulo de Python glob . La expansión de Tilde (según lo implementado por os.path.expanduser) también se realiza.
Ver: http://docs.fabfile.org/en/1.0.0/api/core/operations.html#fabric.operations.put
Actualización: Este ejemplo funciona bien (para mí) en 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
# ...
También me gustaría ver el módulo Herramientas del proyecto: fabric.contrib.project Documentation
Tiene una función upload_project
que toma un directorio de origen y destino. Aún mejor, hay una función rsync_project
que usa rsync. Esto es bueno porque solo actualiza los archivos que han cambiado y acepta argumentos adicionales como "excluir", lo cual es bueno para hacer cosas como excluir su directorio .git
.
Por ejemplo:
from fabric.contrib.project import rsync_project
def _deploy_ec2(loc):
rsync_project(local_dir=loc, remote_dir=''/var/www'', exclude=''.git'')