diff --git a/ejabberd/manifests/init.pp b/ejabberd/manifests/init.pp index bed152d..f99ad4f 100644 --- a/ejabberd/manifests/init.pp +++ b/ejabberd/manifests/init.pp @@ -139,3 +139,44 @@ class ejabberd { configwebhost { $ejabberd_webhosts: } } } + + +# Install ejabberd backup cron script. +# +# === Global variables +# +# $ejabberd_backup_datadir: +# Path where to store the backups. +# +class ejabberd::backup { + + if ! $ejabberd_backup_datadir { + $ejabberd_backup_datadir = "/srv/ejabberd-backup" + } + + file { "${ejabberd_backup_datadir}": + ensure => directory, + mode => 0700, + owner => root, + group => root, + } + + file { "/usr/local/sbin/ejabberd-backup": + ensure => present, + content => template("ejabberd/ejabberd-backup.erb"), + mode => 0755, + owner => root, + group => root, + } + + cron { "ejabberd-backup": + ensure => present, + command => "/usr/local/sbin/ejabberd-backup", + user => "root", + minute => 15, + hour => 21, + require => File[ "${ejabberd_backup_datadir}", + "/usr/local/sbin/ejabberd-backup" ], + } + +} diff --git a/ejabberd/templates/ejabberd-backup.erb b/ejabberd/templates/ejabberd-backup.erb new file mode 100755 index 0000000..aed155c --- /dev/null +++ b/ejabberd/templates/ejabberd-backup.erb @@ -0,0 +1,48 @@ +#!/bin/sh + +# Copyright (c) 2006-2009 Marko Laakso +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +DESTDIR="<%= ejabberd_backup_datadir %>" + +if [ ! -d ${DESTDIR} ]; then + echo "ERR: ejabberd backup directory [${DESTDIR}] does not exist" 1>&2 + exit 1 +fi + +umask 077 + +DESTDIR="${DESTDIR}/$(date +%Y)" +test -d "${DESTDIR}" || mkdir ${DESTDIR} + +backupfile="${DESTDIR}/jabber.$(date +%Y%m%d-%H%M%S).gz" +tempfile=/var/lib/ejabberd/$$.bu + +node=$(hostname | cut -d. -f1) + +/usr/bin/ejabberdctl backup $tempfile +cat $tempfile | gzip > ${backupfile} +chmod 600 ${backupfile} +rm $tempfile