Browse Source

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

pull/9/head
Boris Gallet 2 weeks ago
parent
commit
c82197a266
  1. 178
      bin/0km

178
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,178 @@ cmdline.spec:vps-subscribe:cmd:rm:run() {
}
cmdline.spec.gnu vps-clone-odoo
cmdline.spec::cmd:vps-clone-odoo:run() {
: :posarg: FROM 'Database from which to clone
(format : "vps:dbname@servicename")'
: :posarg: TO 'Database name to clone
(format : "vps:dbname@servicename")'
: :optval: --project,-p 'Project name (default: myc)'
: :optfla: --neutralize,-n 'Neutralize the new database'
IFS=':@' read -r vps_from db_from service_from <<< "$FROM"
IFS=':@' read -r vps_to db_to service_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="${vps_from}_${service_from}_${db_from}_${DUMPDATE}.zip"
DUMPFILE="$(mktemp -u)/${DUMPFILENAME}"
info "Dumpfile : $DUMPFILE"
if [ -n "$opt_project" ]; then
PROJECT="$opt_project"
else
PROJECT="myc"
fi
clone:odoo:check "$vps_from" "$service_from" "$vps_to" "$service_to" "$PROJECT" || {
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 project="$5"
# Check VPS connections
vps_connection_check "$vps_from" </dev/null || return 1
vps_connection_check "$vps_to" </dev/null || return 1
# Get image IDs
image_name_from=$(ssh root@"$vps_from" -- docker ps --filter "name=${project}_${service_from}" --format '{{.Image}}') || return 1
image_name_to=$(ssh root@"$vps_to" -- docker ps --filter "name=${project}_${service_to}" --format '{{.Image}}') || return 1
if [ "$image_name_from" != "$image_name_to" ]; then
err "Image names are different between $vps_from and $vps_to."
err " .... $vps_from : $image_name_from"
err " .... $vps_to : $image_name_to"
return 1
fi
image_date_from=$(ssh root@"$vps_from" "docker inspect --format '{{.Created}}' $image_name_from") || return 1
image_date_to=$(ssh root@"$vps_to" "docker inspect --format '{{.Created}}' $image_name_to") || return 1
# Compare image IDs and warn if different
if [ "$image_date_from" != "$image_date_to" ]; then
info "....Image ${DARKCYAN}$image_name_from${NORMAL} from ${DARKCYAN}$vps_from${NORMAL} created on : $image_date_from"
info "....Image ${DARKCYAN}$image_name_to${NORMAL} from ${DARKCYAN}$vps_to${NORMAL} created on : $image_date_to"
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"
cat <<EOF | ssh:run "root@$vps" -- bash || return 1
mkdir -p ${dumpfile%/*} &&
vps odoo dump -s "$service" -D "$dbname" "$dumpfile"
EOF
}
clone:odoo:scp(){
local vps_from="$1"
local vps_to="$2"
local dumpfile="$3"
info "Copying database dump from $vps_from to $vps_to"
info "dumpfile : $dumpfile"
ssh root@"$vps_to" -- mkdir -p ${dumpfile%/*} || {
err "Failed to create directory for database dump on $vps_to"
return 1
}
scp "root@$vps_from:${dumpfile}" "root@${vps_to}:${dumpfile}" || {
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"
cat <<EOF | ssh:run "root@$vps_from" -- bash || return 1
[ -f ${dumpfile} ] && rm -f ${dumpfile}
rmdir ${dumpfile%/*}
EOF
cat <<EOF | ssh:run "root@$vps_to" -- bash || return 1
[ -f ${dumpfile} ] && rm -f ${dumpfile}
rmdir ${dumpfile%/*}
EOF
}
cmdline::parse "$@"
cmdline::parse "$@"
Loading…
Cancel
Save