Un script de fabric para obtener una copia de respaldo de plone
por Noe Misael Nieto Arroyo
el día 12/01/2012 14:48
|
Permalink (Enlace permanente)
Intro
Escribí un script de Fabric para poder automatizar la siguiente tarea:
- Entrar a un servidor con plone mediante ssh.
- Hacer un snapshot del sitio.
- Copiar la base de datos (Data.fs) y el directorio blobstorage a un buildout local.
- Reemplazar la base de datos del buildout local con la base de datos que se ha descargado.
Para hacer todo eso, hice uso de repozo, collective.recipe.backup y Fabric.
Preparación del buildout
Hay que modificar buildout.cfg para instalar las herramientas adecuadas.
[buildout]
parts +=
fabric
repozo
backup
[fabric]
recipe = zc.recipe.egg
[repozo]
recipe = zc.recipe.egg
eggs = ZODB3
scripts = repozo
[backup]
recipe = collective.recipe.backup
#Keep the last 4 backups
keep = 4
#Always make a full backup
full = true
#Gzipit
gzip = true
No olvidar actualizar buildout.
Creación del script
Basta con hacer un script fabfile.py en la raiz del buildout para que el comando bin/fab/ lo tome y liste los comandos disponibles. Me guié de la documentación oficial de fabfile.org para hacer mi script. Y sin más preámbulo, aquí esta:
from os.path import join as joinpath
from fabric.api import run, cd, local, lcd
from fabric.operations import get
from fabric.colors import green
BUILDOUT_DIR = '/directorio/del/buildout/de/plone'
def install_snapshot():
with cd(BUILDOUT_DIR):
#Create snapshot on server
print green('Create snapshot on server')
run('bin/snapshotbackup')
#Copy data.fs and related files
print green('Copy ZODB and related files')
files = run("ls var/snapshotbackups/ | sort -n | tail -n 3")
for f in files.split():
get('var/snapshotbackups/%s'%f, 'var/snapshotbackups')
#make a tarfile of the blobstorage dirtree, copy it to local and untar it
print green('Make tarfile of blobstorage and copy it to local buildout')
with cd('var/blobstoragesnapshots'):
run('tar -cf blobstorage.0.tar blobstorage.0')
get('var/blobstoragesnapshots/blobstorage.0.tar',
'var/blobstoragesnapshots')
with lcd('var/blobstoragesnapshots'):
local('tar -xf blobstorage.0.tar')
#Install new ZODB/Blobstorage snapshot
print green('Install new ZODB/Blobstorage snapshot')
local('bin/snapshotrestore')
Ejecutando
Se ejecuta así:
bin/fab -u usuario -H servidor.org install_snapshot
