Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
slapos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Tristan Cavelier
slapos
Commits
aef6d693
Commit
aef6d693
authored
Dec 05, 2014
by
Cédric de Saint Martin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
erp5: add webrunner resiliency after-import (restore) scripts.
parent
3c6ab6f5
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
126 additions
and
2 deletions
+126
-2
stack/erp5/buildout.cfg
stack/erp5/buildout.cfg
+11
-2
stack/erp5/instance-mariadb.cfg.in
stack/erp5/instance-mariadb.cfg.in
+8
-0
stack/erp5/instance-tidstorage.cfg.in
stack/erp5/instance-tidstorage.cfg.in
+48
-0
stack/erp5/template/instance-mariadb-resiliency-after-import-script.sh.in
...ate/instance-mariadb-resiliency-after-import-script.sh.in
+59
-0
No files found.
stack/erp5/buildout.cfg
View file @
aef6d693
...
...
@@ -147,10 +147,16 @@ context =
key slapos_core_version versions:slapos.core
${:extra-context}
[mariadb-resiliency-after-import-script]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/template/instance-mariadb-resiliency-after-import-script.sh.in
#md5sum = e5fc0b14ed01fc66ef276ebb044c49f1
mode = 755
[template-mariadb]
< = template-jinja2-base
filename = instance-mariadb.cfg
md5sum = 7fda20a3f39c425c52631b97eeb4e471
#md5sum = 2116e3557447c2b30031b9fc220118bf
extra-context =
key coreutils_location coreutils:location
key dcron_location dcron:location
...
...
@@ -160,6 +166,7 @@ extra-context =
key gzip_location gzip:location
key logrotate_location logrotate:location
key mariadb_location mariadb:location
key mariadb_resiliency_after_import_script mariadb-resiliency-after-import-script:target
key perl_location perl:location
key perl_siteprefix perl:siteprefix
key sed_location sed:location
...
...
@@ -185,7 +192,7 @@ extra-context =
[template-tidstorage]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/instance-tidstorage.cfg.in
md5sum = 453cbef56fc2cb0ecab813ecace2d7dd
#md5sum = 025b8b5cd4bf162a976af192e5734b81
mode = 640
[template-cloudooo]
...
...
@@ -602,6 +609,7 @@ WSGIUtils = 0.7
apache-libcloud = 0.16.0
astroid = 1.3.2
chardet = 2.3.0
collective.recipe.template = 1.11
csp-eventlet = 0.7.0
ecdsa = 0.11
elementtree = 1.2.6.post20050316
...
...
@@ -617,6 +625,7 @@ huBarcode = 1.0.0
interval = 1.0.0
ipdb = 0.8
ipython = 2.3.1
jsonschema = 2.4.0
logilab-common = 0.63.2
numpy = 1.9.1
plone.recipe.command = 1.1
...
...
stack/erp5/instance-mariadb.cfg.in
View file @
aef6d693
...
...
@@ -10,6 +10,7 @@ parts =
cron-entry-mariadb-backup-expire
binary-link
resiliency-exclude-file
resiliency-after-import-script
promise
eggs-directory = {{ eggs_directory }}
...
...
@@ -197,6 +198,13 @@ recipe = collective.recipe.template
input = inline: srv/mariadb/**
output = ${rootdirectory:srv}/exporter.exclude
[resiliency-after-import-script]
# Generate after import script used by importer instance of webrunner
recipe = collective.recipe.template
input = {{ mariadb_resiliency_after_import_script }}
output = ${rootdirectory:srv}/runner-import-restore
mode = 755
[rootdirectory]
recipe = slapos.cookbook:mkdirectory
etc = ${buildout:directory}/etc
...
...
stack/erp5/instance-tidstorage.cfg.in
View file @
aef6d693
...
...
@@ -105,6 +105,7 @@ instance-tests = ${:instance}/tests
log = ${:var}/log
logrotate-backup = ${:backup}/logrotate
logrotate-entries = ${:etc}/logrotate.d
promise = ${:etc}/promise
run = ${:var}/run
services = ${:etc}/run
srv = ${buildout:directory}/srv
...
...
@@ -113,6 +114,7 @@ tmp = ${buildout:directory}/tmp
var = ${buildout:directory}/var
zodb = ${:srv}/zodb
zodb-backup = ${:backup}/zodb
zodb-recovery-test = ${:srv}/zodbrecoverytest
#############################
# Binary symlinking
...
...
@@ -148,12 +150,57 @@ link-binary =
#############################
# Resiliency
#############################
# Used for ERP5 resiliency or (more probably)
# webrunner resiliency with erp5 inside.
[resiliency-exclude-file]
# Generate rdiff exclude file in case of resiliency
recipe = collective.recipe.template
input = inline: srv/zodb/**
output = ${directory:srv}/exporter.exclude
[resiliency-after-import-script]
# Generate after import script used by importer instance of webrunner
recipe = collective.recipe.template
input = inline: #!/bin/sh
# DO NOT RUN THIS SCRIPT ON PRODUCTION INSTANCE
# OR ZODB DATA WILL BE ERASED.
# This script will restore the repozo backup to the real
# zodb location. It is launched by the clone (importer) instance of webrunner
# in the end of the import script.
# Depending on the output, it will create a file containing
# the status of the restoration (success or failure).
zodb_directory="${directory:zodb}"
zodb_backup_directory="${directory:zodb-backup}"
repozo="${tidstorage:repozo-binary}"
EXIT_CODE=0
{% for zeo_id, zeo_configuration_list in json['zeo'].iteritems() -%}
{% for zeo_slave in zeo_configuration_list -%}
storage_name="{{ zeo_slave['storage-name'] }}"
zodb_path="$storage_name.fs"
pid_file=${zeo-instance-{{ zeo_id }}:pid-path}
if [ -e "$pid_file" ]; then
pid=$(cat $pid_file) > /dev/null 2>&1
if kill -0 "$pid"; then
echo "Zeo is already running with pid $pid. Aborting."
exit 1
fi
fi
echo "Removing $zodb_path..."
echo "Restoring $storage_name into $zodb_path..."
$repozo --recover --output="$zodb_directory/$zodb_path" --repository="$zodb_backup_directory/$storage_name"
CURRENT_EXIT_CODE=$?
if [ ! "$CURRENT_EXIT_CODE"="0" ]; then
EXIT_CODE="$CURRENT_EXIT_CODE"
echo "$storage_name Backup restoration failed."
fi
{% endfor -%}
{% endfor -%}
exit $EXIT_CODE
output = ${directory:srv}/runner-import-restore
mode = 755
#############################
# CA
#############################
...
...
@@ -534,6 +581,7 @@ parts =
certificate-authority
erp5-certificate-authority
resiliency-exclude-file
resiliency-after-import-script
tidstorage
cron-entry-tidstorage-backup
logrotate-entry-tidstorage
...
...
stack/erp5/template/instance-mariadb-resiliency-after-import-script.sh.in
0 → 100644
View file @
aef6d693
#!/bin/sh
# DO NOT RUN THIS SCRIPT ON PRODUCTION INSTANCE
# OR MYSQL DATA WILL BE ERASED.
# This script will import the dump of the mysql database to the real
# database. It is launched by the clone (importer) instance of webrunner
# in the end of the import script.
# Depending on the output, it will create a file containing
# the status of the restoration (success or failure)
mysql_executable
=
"
${
mariadb
-instance
:mysql-binary
}
"
mysqldump_executable
=
"
${
binary
-wrap-mysqldump
:wrapper-path
}
"
mariadb_data_directory
=
"
${
directory
:mariadb-data
}
"
mariadb_backup_directory
=
"
${
directory
:mariadb-backup-full
}
"
instance_directory
=
"
${
buildout
:directory
}
"
pid_file
=
"
${
mariadb
-instance
:pid-file
}
"
binlog_path
=
"
${
mariadb
-instance
:binlog-path
}
"
# Make sure mariadb is not already running
if
[
-e
"
$pid_file
"
]
;
then
pid
=
$(
cat
$pid_file
)
>
/dev/null 2>&1
if
kill
-0
"
$pid
"
;
then
echo
"Mariadb is already running with pid
$pid
. Aborting."
exit
1
fi
fi
echo
"Deleting existing database..."
rm
-r
$mariadb_data_directory
/
*
echo
"Adapting binlog database to new paths..."
new_binlog_directory
=
"
$(
dirname
$binlog_path
)
"
binlog_index_file
=
"
$new_binlog_directory
/binlog.index"
old_binlog_directory
=
"
$(
dirname
$(
head
-n
1
$binlog_index_file
))
"
sed
-e
"s|
$old_binlog_directory
|
$new_binlog_directory
|g"
$binlog_index_file
>
$binlog_index_file
echo
"Starting mariadb..."
# XXX hardcoded
$instance_directory
/etc/run/mariadb &
mysqld_pid
=
$!
$instance_directory
/etc/run/mariadb_update
>
/dev/null 2>&1
echo
"Importing data..."
# Use latest dump XXX can contain funny characters
dump
=
$(
ls
-r
$mariadb_backup_directory
|
head
-1
)
zcat
"
$mariadb_backup_directory
/
$dump
"
|
$mysql_executable
-u
root
--socket
=
"
$instance_directory
/var/run/mariadb.sock"
RESTORE_EXIT_CODE
=
$?
kill
"
$mysqld_pid
"
if
[
$RESTORE_EXIT_CODE
-eq
0
]
;
then
echo
'Backup restoration successfully completed.'
else
echo
'Backup restoration failed.'
fi
exit
$RESTORE_EXIT_CODE
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment