From 11900e3e15dd2c07eb646cdc74269fbb860d0e0d Mon Sep 17 00:00:00 2001 From: Boris Gallet Date: Thu, 6 Feb 2025 17:16:17 +0100 Subject: [PATCH] new: [0km] vps-clone-odoo-db : from vpsA to vpsB --- bin/0km | 182 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 179 insertions(+), 3 deletions(-) diff --git a/bin/0km b/bin/0km index 624979b..a792022 100755 --- a/bin/0km +++ b/bin/0km @@ -1869,8 +1869,8 @@ graph:def:disk-2() { colors[docker/images]="#00FFFF" colors[docker/local_volumes]="#6495ED" colors[docker/logs]="#000080" - - + + printf "%s\n" "${gnuplot_line_config[@]}" first=1 rrdfetch_cmd="'< rscolcat concat" @@ -2036,6 +2036,182 @@ cmdline.spec:vps-subscribe:cmd:rm:run() { } +cmdline.spec.gnu vps-clone-odoo-db +cmdline.spec::cmd:vps-clone-odoo-db:run() { + + : :posarg: FROM 'Database from which to clone + (format : "vps:servicename:dbname")' + : :posarg: TO 'Database name to clone + (format : "vps:servicename:dbname")' + + : :optval: --dumpfile,-d 'Dumpfile path (default: /tmp/servicename_dbname_DATE.zip)' + : :optfla: --neutralize,-n 'Neutralize the new database' + + IFS=':' read -r vps_from service_from db_from <<< "$FROM" + IFS=':' read -r vps_to service_to db_to <<< "$TO" + + echo "Cloning from VPS: $vps_from, Service: $service_from, DB: $db_from" + echo "Cloning to VPS: $vps_to, Service: $service_to, DB: $db_to" + + ## if not -n option we warn the user + if [ -z "$opt_neutralize" ]; then + warn "Neutralize option '-n' not set, the new database will have email servers ON" + fi + + DUMPDATE=$(date +%Y%m%d%H%M%S) + DUMPFILENAME="${service_from}_${db_from}_${DUMPDATE}.zip" + DUMPFILE="/tmp/${DUMPFILENAME}" + + if [ -n "$opt_dumpfile" ]; then + DUMPFILE="$opt_dumpfile" + fi + + info "Dumpfile : $DUMPFILE" + + clone:odoo:check "$vps_from" "$service_from" "$vps_to" "$service_to" || { + err "check failed" + return 1 + } + + clone:odoo:dump "$vps_from" "$service_from" "$db_from" "$DUMPFILE" "$opt_force" || { + err "Failed to dump database $db_from from $vps_from" + return 1 + } + clone:odoo:scp "$vps_from" "$vps_to" "$DUMPFILE" || { + err "Failed to scp database $db_from from $vps_from to $vps_to" + return 1 + } + clone:odoo:restore "$vps_to" "$service_to" "$db_to" "$DUMPFILE" "$opt_neutralize" || { + err "Failed to restore database $db_to on $vps_to" + return 1 + } + + clone:odoo:clean "$vps_from" "$vps_to" "$DUMPFILE" || { + err "Failed to clean database dump $DUMPFILE" + return 1 + } + +} + +clone:odoo:retrieveinfo(){ + local vps="$1" + local service="$2" + local dbname="$3" +} + +clone:odoo:check(){ + local vps_from="$1" + local service_from="$2" + local vps_to="$3" + local service_to="$4" + local opt_force="$5" + + check_vps_connection() { + local vps="$1" + vps_connection_check "$vps" &1 || { + err "Failed to copy database dump from $vps_from to $vps_to" + return 1 + } +} + +clone:odoo:restore(){ + local vps="$1" + local service="$2" + local dbname="$3" + local dumpfile="$4" + local opt_neutralize="$5" + + if [ -n "$opt_neutralize" ]; then + info "Neutralizing database $dbname" + opt_neutralize="--neutralize" + else + opt_neutralize="" + fi + + info "Restoring database $dbname on $vps:$service" + ssh:run "root@$vps" -- vps odoo restore -s "$service" -D "$dbname" "$opt_neutralize" "$dumpfile" || { + err "Failed to restore database $dbname on $vps" + return 1 + } +} + +clone:odoo:clean(){ + local vps_from="$1" + local vps_to="$2" + local dumpfile="$3" + + info "Cleaning database dump $dumpfile on $vps_from and $vps_to" + + ssh:run "root@$vps_from" -- rm -f "$dumpfile" || { + err "Failed to clean database dump $dumpfile on $vps_from" + return 1 + } + ssh:run "root@$vps_to" -- rm -f "$dumpfile" || { + err "Failed to clean database dump $dumpfile on $vps_to" + return 1 + } +} -cmdline::parse "$@" +cmdline::parse "$@" \ No newline at end of file