Usted está aquí: Inicio Tech Blog Un script de fabric para obtener una copia de respaldo de plone

Un script de fabric para obtener una copia de respaldo de plone

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
Acciones de Documento

Comentarios (0)