Browse Source

new: [0km] vps-clone-odoo-db : from vpsA to vpsB

Boris Gallet 2 weeks ago
parent
commit
11900e3e15
  1. 182
      bin/0km

182
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" </dev/null || {
err "Failed to access '$vps'."
return 1
}
}
get_image_id() {
local vps="$1"
local service="$2"
ssh root@"$vps" "docker inspect --format '{{.Image}}' \$(docker ps --filter 'name=$service' --format '{{.ID}}')" || {
err "Failed to get image ID from $vps"
return 1
}
}
get_image_date() {
local vps="$1"
local image_id="$2"
ssh root@"$vps" "docker inspect --format '{{.Created}}' '$image_id'"
}
# Check VPS connections
check_vps_connection "$vps_from" || return 1
check_vps_connection "$vps_to" || return 1
# Get image IDs
image_id_from=$(get_image_id "$vps_from" "$service_from") || return 1
image_id_to=$(get_image_id "$vps_to" "$service_to") || return 1
# Compare image IDs and warn if different
if [ "$image_id_from" != "$image_id_to" ]; then
image_from_date=$(get_image_date "$vps_from" "$image_id_from")
image_to_date=$(get_image_date "$vps_to" "$image_id_to")
info "....Image from ${DARKCYAN}$vps_from${NORMAL} created on : $image_from_date"
info "....Image from ${DARKCYAN}$vps_to${NORMAL} created on : $image_to_date"
warn "Image IDs are different between ${DARKCYAN}$vps_from${NORMAL} and ${DARKCYAN}$vps_to${NORMAL}, maybe an image upd is needed."
fi
}
clone:odoo:dump(){
local vps="$1"
local service="$2"
local dbname="$3"
local dumpfile="$4"
local opt_force="$5"
info "Dumping database $dbname from $vps:$service"
ssh:run "root@$vps" -- vps odoo dump -s "$service" -D "$dbname" "$dumpfile" || {
err "Failed to dump database $dbname from $vps"
return 1
}
}
clone:odoo:scp(){
local vps_from="$1"
local vps_to="$2"
local dumpfile="$3"
info "Copying database dump from $vps_from to $vps_to"
scp "root@$vps_from:${dumpfile}" "root@${vps_to}:${dumpfile}" 2>&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 "$@"
Loading…
Cancel
Save