Compare commits
14 Commits
59fc39620d
...
516b9def3d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
516b9def3d | ||
|
|
20214b4402 | ||
|
|
fa8b1b98f1 | ||
|
|
7c3d5d49c8 | ||
|
|
333360f9f0 | ||
|
|
4b27955be9 | ||
|
|
a91afa60d3 | ||
|
|
a1508daf24 | ||
|
|
3fe2e93d3d | ||
|
|
526b27fdec | ||
|
|
266842585b | ||
|
|
30909a3b28 | ||
|
|
4d7933cef0 | ||
|
|
4a3d3b238f |
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Post migration to 13.0..."
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Prepare migration to 13.0..."
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
compose -f ../compose.yml run -p 8013:8069 ou13 --config=/opt/odoo/auto/odoo.conf --stop-after-init -u all --workers 0 --log-level=debug --max-cron-threads=0 --limit-time-real=10000 --database=ou13
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Post migration to 14.0..."
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Prepare migration to 14.0..."
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
compose -f ../compose.yml run -p 8014:8069 ou14 --config=/opt/odoo/auto/odoo.conf --stop-after-init -u all --workers 0 --log-level=debug --max-cron-threads=0 --limit-time-real=10000 --database=ou14 --load=base,web,openupgrade_framework
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Post migration to 15.0..."
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Prepare migration to 15.0..."
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
compose -f ../compose.yml run -p 8015:8069 ou15 --config=/opt/odoo/auto/odoo.conf --stop-after-init -u all --workers 0 --log-level=debug --max-cron-threads=0 --limit-time-real=10000 --database=ou15 --load=base,web,openupgrade_framework
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Post migration to 16.0..."
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Prepare migration to 16.0..."
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
compose -f ../compose.yml run -p 8016:8069 ou16 --config=/opt/odoo/auto/odoo.conf --stop-after-init -u all --workers 0 --log-level=debug --max-cron-threads=0 --limit-time-real=10000 --database=ou16 --load=base,web,openupgrade_framework
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Post migration to 17.0..."
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Prepare migration to 17.0..."
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
compose -f ../compose.yml run -p 8017:8069 ou17 --config=/opt/odoo/auto/odoo.conf --stop-after-init -u all --workers 0 --log-level=debug --max-cron-threads=0 --limit-time-real=10000 --database=ou17 --load=base,web,openupgrade_framework
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Post migration to 18.0..."
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "Prepare migration to 18.0..."
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
compose -f ../compose.yml run -p 8018:8069 ou18 --config=/opt/odoo/auto/odoo.conf --stop-after-init -u all --workers 0 --log-level=debug --max-cron-threads=0 --limit-time-real=10000 --database=ou18 --load=base,web,openupgrade_framework
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
DB_NAME="$1"
|
||||
ODOO_SERVICE="$2"
|
||||
@@ -16,6 +17,28 @@ PYTHON_SCRIPT=post_migration_fix_duplicated_views.py
|
||||
echo "Remove duplicated views with script $PYTHON_SCRIPT ..."
|
||||
exec_python_script_in_odoo_shell "$DB_NAME" "$DB_NAME" "$PYTHON_SCRIPT" || exit 1
|
||||
|
||||
# Reset all website templates with custom content
|
||||
FINALE_SQL_2=$(cat <<'EOF'
|
||||
UPDATE ir_ui_view
|
||||
SET arch_db = NULL
|
||||
WHERE arch_fs IS NOT NULL
|
||||
AND arch_fs LIKE 'website/%'
|
||||
AND arch_db IS NOT NULL
|
||||
AND id NOT IN (SELECT view_id FROM website_page);
|
||||
EOF
|
||||
)
|
||||
query_postgres_container "$FINALE_SQL_2" "$DB_NAME" || exit 1
|
||||
|
||||
# Purge QWeb cache from compiled assets
|
||||
FINALE_SQL_3=$(cat <<'EOF'
|
||||
DELETE FROM ir_attachment
|
||||
WHERE name LIKE '/web/assets/%'
|
||||
OR name LIKE '%.assets_%'
|
||||
OR (res_model = 'ir.ui.view' AND mimetype = 'text/css');
|
||||
EOF
|
||||
)
|
||||
query_postgres_container "$FINALE_SQL_3" "$DB_NAME" || exit 1
|
||||
|
||||
# Uninstall obsolette add-ons
|
||||
PYTHON_SCRIPT=post_migration_cleanup_obsolete_modules.py
|
||||
echo "Uninstall obsolete add-ons with script $PYTHON_SCRIPT ..."
|
||||
|
||||
82
lib/common.sh
Normal file
82
lib/common.sh
Normal file
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Common functions for Odoo migration scripts
|
||||
# Source this file from other scripts: source "$(dirname "$0")/lib/common.sh"
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
readonly DATASTORE_PATH="/srv/datastore/data"
|
||||
readonly FILESTORE_SUBPATH="var/lib/odoo/filestore"
|
||||
|
||||
check_required_commands() {
|
||||
local missing=()
|
||||
for cmd in docker compose sudo; do
|
||||
if ! command -v "$cmd" &>/dev/null; then
|
||||
missing+=("$cmd")
|
||||
fi
|
||||
done
|
||||
if [[ ${#missing[@]} -gt 0 ]]; then
|
||||
log_error "Required commands not found: ${missing[*]}"
|
||||
log_error "Please install them before running this script."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
log_info() { printf "[INFO] %s\n" "$*"; }
|
||||
log_warn() { printf "[WARN] %s\n" "$*" >&2; }
|
||||
log_error() { printf "[ERROR] %s\n" "$*" >&2; }
|
||||
log_step() { printf "\n===== %s =====\n" "$*"; }
|
||||
|
||||
query_postgres_container() {
|
||||
local query="$1"
|
||||
local db_name="$2"
|
||||
|
||||
if [[ -z "$query" ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
local result
|
||||
if ! result=$(docker exec -u 70 "$POSTGRES_SERVICE_NAME" psql -d "$db_name" -t -A -c "$query"); then
|
||||
printf "Failed to execute SQL query: %s\n" "$query" >&2
|
||||
printf "Error: %s\n" "$result" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "$result"
|
||||
}
|
||||
|
||||
copy_database() {
|
||||
local from_db="$1"
|
||||
local to_service="$2"
|
||||
local to_db="$3"
|
||||
|
||||
docker exec -u 70 "$POSTGRES_SERVICE_NAME" pgm cp -f "$from_db" "${to_db}@${to_service}"
|
||||
}
|
||||
|
||||
copy_filestore() {
|
||||
local from_service="$1"
|
||||
local from_db="$2"
|
||||
local to_service="$3"
|
||||
local to_db="$4"
|
||||
|
||||
local src_path="${DATASTORE_PATH}/${from_service}/${FILESTORE_SUBPATH}/${from_db}"
|
||||
local dst_path="${DATASTORE_PATH}/${to_service}/${FILESTORE_SUBPATH}/${to_db}"
|
||||
|
||||
sudo mkdir -p "$dst_path"
|
||||
sudo rm -rf "$dst_path"
|
||||
sudo cp -a "$src_path" "$dst_path"
|
||||
echo "Filestore ${from_service}/${from_db} copied to ${to_service}/${to_db}."
|
||||
}
|
||||
|
||||
exec_python_script_in_odoo_shell() {
|
||||
local service_name="$1"
|
||||
local db_name="$2"
|
||||
local python_script="$3"
|
||||
|
||||
compose --debug run "$service_name" shell -d "$db_name" --no-http --stop-after-init < "$python_script"
|
||||
}
|
||||
|
||||
export DATASTORE_PATH FILESTORE_SUBPATH
|
||||
export -f log_info log_warn log_error log_step
|
||||
export -f check_required_commands
|
||||
export -f query_postgres_container copy_database copy_filestore exec_python_script_in_odoo_shell
|
||||
@@ -1,21 +1,24 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Global variables
|
||||
ODOO_SERVICE="$1"
|
||||
DB_NAME="$2"
|
||||
DB_FINALE_MODEL="$3"
|
||||
DB_FINALE_SERVICE="$4"
|
||||
|
||||
TMPDIR=$(mktemp -d)
|
||||
trap 'rm -rf "$TMPDIR"' EXIT
|
||||
|
||||
echo "Start database preparation"
|
||||
|
||||
# Check POSTGRES container is running
|
||||
if ! docker ps | grep -q "$DB_CONTAINER_NAME"; then
|
||||
printf "Docker container %s is not running.\n" "$DB_CONTAINER_NAME" >&2
|
||||
return 1
|
||||
if ! docker ps | grep -q "$POSTGRES_SERVICE_NAME"; then
|
||||
printf "Docker container %s is not running.\n" "$POSTGRES_SERVICE_NAME" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
EXT_EXISTS=$(query_postgres_container "SELECT 1 FROM pg_extension WHERE extname = 'dblink'" "$DB_NAME") || exit 1
|
||||
if [ "$EXT_EXISTS" != "1" ]; then
|
||||
if [[ "$EXT_EXISTS" != "1" ]]; then
|
||||
query_postgres_container "CREATE EXTENSION dblink;" "$DB_NAME" || exit 1
|
||||
fi
|
||||
|
||||
@@ -39,37 +42,34 @@ echo "Base neutralized..."
|
||||
## List add-ons not in final version ##
|
||||
#######################################
|
||||
|
||||
# Retrieve add-ons not available on the final Odoo version
|
||||
SQL_404_ADDONS_LIST="
|
||||
SELECT module_origin.name
|
||||
FROM ir_module_module module_origin
|
||||
LEFT JOIN (
|
||||
SELECT *
|
||||
FROM dblink('dbname=$FINALE_DB_NAME','SELECT name, shortdesc, author FROM ir_module_module')
|
||||
AS tb2(name text, shortdesc text, author text)
|
||||
) AS module_dest ON module_dest.name = module_origin.name
|
||||
|
||||
WHERE (module_dest.name IS NULL) AND (module_origin.state = 'installed') AND (module_origin.author NOT IN ('Odoo S.A.', 'Lokavaluto', 'Elabore'))
|
||||
ORDER BY module_origin.name
|
||||
;
|
||||
"
|
||||
SQL_404_ADDONS_LIST=$(cat <<EOF
|
||||
SELECT module_origin.name
|
||||
FROM ir_module_module module_origin
|
||||
LEFT JOIN (
|
||||
SELECT *
|
||||
FROM dblink('dbname=${FINALE_DB_NAME}','SELECT name, shortdesc, author FROM ir_module_module')
|
||||
AS tb2(name text, shortdesc text, author text)
|
||||
) AS module_dest ON module_dest.name = module_origin.name
|
||||
WHERE (module_dest.name IS NULL)
|
||||
AND (module_origin.state = 'installed')
|
||||
AND (module_origin.author NOT IN ('Odoo S.A.', 'Lokavaluto', 'Elabore'))
|
||||
ORDER BY module_origin.name;
|
||||
EOF
|
||||
)
|
||||
echo "Retrieve 404 addons... "
|
||||
echo "SQL REQUEST = $SQL_404_ADDONS_LIST"
|
||||
query_postgres_container "$SQL_404_ADDONS_LIST" "$DB_NAME" > 404_addons || exit 1
|
||||
query_postgres_container "$SQL_404_ADDONS_LIST" "$DB_NAME" > "${TMPDIR}/404_addons"
|
||||
|
||||
# Keep only the installed add-ons
|
||||
INSTALLED_ADDONS="SELECT name FROM ir_module_module WHERE state='installed';"
|
||||
query_postgres_container "$INSTALLED_ADDONS" "$DB_NAME" > installed_addons || exit 1
|
||||
query_postgres_container "$INSTALLED_ADDONS" "$DB_NAME" > "${TMPDIR}/installed_addons"
|
||||
|
||||
grep -Fx -f 404_addons installed_addons > final_404_addons
|
||||
rm -f 404_addons installed_addons
|
||||
grep -Fx -f "${TMPDIR}/404_addons" "${TMPDIR}/installed_addons" > "${TMPDIR}/final_404_addons" || true
|
||||
|
||||
# Ask confirmation to uninstall the selected add-ons
|
||||
echo "
|
||||
==== ADD-ONS CHECK ====
|
||||
Installed add-ons not available in final Odoo version:
|
||||
"
|
||||
cat final_404_addons
|
||||
cat "${TMPDIR}/final_404_addons"
|
||||
|
||||
|
||||
echo "
|
||||
|
||||
255
upgrade.sh
255
upgrade.sh
@@ -1,221 +1,148 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "${SCRIPT_DIR}/lib/common.sh"
|
||||
|
||||
####################
|
||||
# GLOBAL VARIABLES #
|
||||
# USAGE & ARGUMENTS
|
||||
####################
|
||||
|
||||
ORIGIN_VERSION="$1" # "12" for version 12.0
|
||||
FINAL_VERSION="$2" # "16" for version 16.0
|
||||
# Path to the database to migrate. Must be a .zip file with the following syntax: {DATABASE_NAME}.zip
|
||||
ORIGIN_DB_NAME="$3"
|
||||
ORIGIN_SERVICE_NAME="$4"
|
||||
usage() {
|
||||
cat <<EOF >&2
|
||||
Usage: $0 <origin_version> <final_version> <db_name> <service_name>
|
||||
|
||||
# Get origin database name
|
||||
COPY_DB_NAME="ou${ORIGIN_VERSION}"
|
||||
# Define finale database name
|
||||
Arguments:
|
||||
origin_version Origin Odoo version number (e.g., 12 for version 12.0)
|
||||
final_version Target Odoo version number (e.g., 16 for version 16.0)
|
||||
db_name Name of the database to migrate
|
||||
service_name Name of the origin Odoo service (docker compose service)
|
||||
|
||||
Example:
|
||||
$0 14 16 elabore_20241208 odoo14
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [[ $# -lt 4 ]]; then
|
||||
log_error "Missing arguments. Expected 4, got $#."
|
||||
usage
|
||||
fi
|
||||
|
||||
check_required_commands
|
||||
|
||||
readonly ORIGIN_VERSION="$1"
|
||||
readonly FINAL_VERSION="$2"
|
||||
readonly ORIGIN_DB_NAME="$3"
|
||||
readonly ORIGIN_SERVICE_NAME="$4"
|
||||
|
||||
readonly COPY_DB_NAME="ou${ORIGIN_VERSION}"
|
||||
export FINALE_DB_NAME="ou${FINAL_VERSION}"
|
||||
# Define finale odoo service name
|
||||
FINALE_SERVICE_NAME="${FINALE_DB_NAME}"
|
||||
readonly FINALE_DB_NAME
|
||||
readonly FINALE_SERVICE_NAME="${FINALE_DB_NAME}"
|
||||
|
||||
# Service postgres name (dynamically retrieved from running containers)
|
||||
POSTGRES_CONTAINERS=$(docker ps --format '{{.Names}}' | grep postgres)
|
||||
POSTGRES_COUNT=$(echo "$POSTGRES_CONTAINERS" | grep -c .)
|
||||
postgres_containers=$(docker ps --format '{{.Names}}' | grep postgres || true)
|
||||
postgres_count=$(echo "$postgres_containers" | grep -c . || echo 0)
|
||||
|
||||
if [ "$POSTGRES_COUNT" -eq 0 ]; then
|
||||
echo "ERROR: No running PostgreSQL container found. Please start a PostgreSQL container and try again." >&2
|
||||
if [[ "$postgres_count" -eq 0 ]]; then
|
||||
log_error "No running PostgreSQL container found. Please start a PostgreSQL container and try again."
|
||||
exit 1
|
||||
elif [ "$POSTGRES_COUNT" -gt 1 ]; then
|
||||
echo "ERROR: Multiple PostgreSQL containers found:" >&2
|
||||
echo "$POSTGRES_CONTAINERS" >&2
|
||||
echo "Please ensure only one PostgreSQL container is running." >&2
|
||||
elif [[ "$postgres_count" -gt 1 ]]; then
|
||||
log_error "Multiple PostgreSQL containers found:"
|
||||
echo "$postgres_containers" >&2
|
||||
log_error "Please ensure only one PostgreSQL container is running."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export POSTGRES_SERVICE_NAME="$POSTGRES_CONTAINERS"
|
||||
export POSTGRES_SERVICE_NAME="$postgres_containers"
|
||||
readonly POSTGRES_SERVICE_NAME
|
||||
|
||||
#############################################
|
||||
# DISPLAYS ALL INPUTS PARAMETERS
|
||||
#############################################
|
||||
log_step "INPUT PARAMETERS"
|
||||
log_info "Origin version .......... $ORIGIN_VERSION"
|
||||
log_info "Final version ........... $FINAL_VERSION"
|
||||
log_info "Origin DB name ........... $ORIGIN_DB_NAME"
|
||||
log_info "Origin service name ..... $ORIGIN_SERVICE_NAME"
|
||||
|
||||
echo "===== INPUT PARAMETERS ====="
|
||||
echo "Origin version .......... $ORIGIN_VERSION"
|
||||
echo "Final version ........... $FINAL_VERSION"
|
||||
echo "Origin DB name ........... $ORIGIN_DB_NAME"
|
||||
echo "Origin service name ..... $ORIGIN_SERVICE_NAME"
|
||||
|
||||
echo "
|
||||
===== COMPUTED GLOBALE VARIABLES ====="
|
||||
echo "Copy DB name ............. $COPY_DB_NAME"
|
||||
echo "Finale DB name ........... $FINALE_DB_NAME"
|
||||
echo "Finale service name ...... $FINALE_SERVICE_NAME"
|
||||
echo "Postgres service name .... $POSTGRES_SERVICE_NAME"
|
||||
log_step "COMPUTED GLOBAL VARIABLES"
|
||||
log_info "Copy DB name ............. $COPY_DB_NAME"
|
||||
log_info "Finale DB name ........... $FINALE_DB_NAME"
|
||||
log_info "Finale service name ...... $FINALE_SERVICE_NAME"
|
||||
log_info "Postgres service name .... $POSTGRES_SERVICE_NAME"
|
||||
|
||||
|
||||
|
||||
# Function to launch an SQL request to the postgres container
|
||||
query_postgres_container(){
|
||||
local QUERY="$1"
|
||||
local DB_NAME="$2"
|
||||
if [ -z "$QUERY" ]; then
|
||||
return 0
|
||||
fi
|
||||
local result
|
||||
if ! result=$(docker exec -u 70 "$POSTGRES_SERVICE_NAME" psql -d "$DB_NAME" -t -A -c "$QUERY"); then
|
||||
printf "Failed to execute SQL query: %s\n" "$query" >&2
|
||||
printf "Error: %s\n" "$result" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "$result"
|
||||
}
|
||||
export -f query_postgres_container
|
||||
log_step "CHECKS ALL NEEDED COMPONENTS ARE AVAILABLE"
|
||||
|
||||
# Function to copy the postgres databases
|
||||
copy_database(){
|
||||
local FROM_DB="$1"
|
||||
local TO_SERVICE="$2"
|
||||
local TO_DB="$3"
|
||||
docker exec -u 70 "$POSTGRES_SERVICE_NAME" pgm cp -f "$FROM_DB" "$TO_DB"@"$TO_SERVICE"
|
||||
}
|
||||
export -f copy_database
|
||||
|
||||
# Function to copy the filetores
|
||||
copy_filestore(){
|
||||
local FROM_SERVICE="$1"
|
||||
local FROM_DB="$2"
|
||||
local TO_SERVICE="$3"
|
||||
local TO_DB="$4"
|
||||
sudo mkdir -p /srv/datastore/data/"$TO_SERVICE"/var/lib/odoo/filestore/"$TO_DB" || exit 1
|
||||
sudo rm -rf /srv/datastore/data/"$TO_SERVICE"/var/lib/odoo/filestore/"$TO_DB" || exit 1
|
||||
sudo cp -a /srv/datastore/data/"$FROM_SERVICE"/var/lib/odoo/filestore/"$FROM_DB" /srv/datastore/data/"$TO_SERVICE"/var/lib/odoo/filestore/"$TO_DB" || exit 1
|
||||
echo "Filestore $FROM_SERVICE/$FROM_DB copied."
|
||||
}
|
||||
export -f copy_filestore
|
||||
|
||||
# Function to launch python scripts in Odoo Shell
|
||||
exec_python_script_in_odoo_shell(){
|
||||
local SERVICE_NAME="$1"
|
||||
local DB_NAME="$2"
|
||||
local PYTHON_SCRIPT="$3"
|
||||
compose --debug run "$SERVICE_NAME" shell -d "$DB_NAME" --no-http --stop-after-init < "$PYTHON_SCRIPT"
|
||||
}
|
||||
export -f exec_python_script_in_odoo_shell
|
||||
|
||||
##############################################
|
||||
# CHECKS ALL NEEDED COMPONENTS ARE AVAILABLE #
|
||||
##############################################
|
||||
|
||||
echo "
|
||||
==== CHECKS ALL NEEDED COMPONENTS ARE AVAILABLE ===="
|
||||
|
||||
# Check origin database is in the local postgres
|
||||
DB_EXISTS=$(docker exec -it -u 70 $POSTGRES_SERVICE_NAME psql -tc "SELECT 1 FROM pg_database WHERE datname = '$ORIGIN_DB_NAME'" | tr -d '[:space:]')
|
||||
if [ "$DB_EXISTS" ]; then
|
||||
echo "UPGRADE: Database '$ORIGIN_DB_NAME' found."
|
||||
db_exists=$(docker exec -it -u 70 "$POSTGRES_SERVICE_NAME" psql -tc "SELECT 1 FROM pg_database WHERE datname = '$ORIGIN_DB_NAME'" | tr -d '[:space:]')
|
||||
if [[ "$db_exists" ]]; then
|
||||
log_info "Database '$ORIGIN_DB_NAME' found."
|
||||
else
|
||||
echo "ERROR: Database '$ORIGIN_DB_NAME' not found in the local postgress service. Please add it and restart the upgrade process."
|
||||
log_error "Database '$ORIGIN_DB_NAME' not found in the local postgres service. Please add it and restart the upgrade process."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check that the origin filestore exist
|
||||
REPERTOIRE="/srv/datastore/data/${ORIGIN_SERVICE_NAME}/var/lib/odoo/filestore/${ORIGIN_DB_NAME}"
|
||||
if [ -d $REPERTOIRE ]; then
|
||||
echo "UPGRADE: '$REPERTOIRE' filestore found."
|
||||
filestore_path="${DATASTORE_PATH}/${ORIGIN_SERVICE_NAME}/${FILESTORE_SUBPATH}/${ORIGIN_DB_NAME}"
|
||||
if [[ -d "$filestore_path" ]]; then
|
||||
log_info "Filestore '$filestore_path' found."
|
||||
else
|
||||
echo "ERROR: '$REPERTOIRE' filestore not found, please add it and restart the upgrade process."
|
||||
log_error "Filestore '$filestore_path' not found, please add it and restart the upgrade process."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#######################################
|
||||
# LAUNCH VIRGIN ODOO IN FINAL VERSION #
|
||||
#######################################
|
||||
log_step "LAUNCH VIRGIN ODOO IN FINAL VERSION"
|
||||
|
||||
# Remove finale database and datastore if already exists (we need a virgin Odoo)
|
||||
if docker exec -u 70 "$POSTGRES_SERVICE_NAME" pgm ls | grep -q "$FINALE_SERVICE_NAME"; then
|
||||
log_info "Removing existing finale database and filestore..."
|
||||
docker exec -u 70 "$POSTGRES_SERVICE_NAME" pgm rm -f "$FINALE_SERVICE_NAME"
|
||||
sudo rm -rf /srv/datastore/data/"$FINALE_SERVICE_NAME"/var/lib/odoo/filestore/"$FINALE_SERVICE_NAME"
|
||||
sudo rm -rf "${DATASTORE_PATH}/${FINALE_SERVICE_NAME}/${FILESTORE_SUBPATH}/${FINALE_SERVICE_NAME}"
|
||||
fi
|
||||
|
||||
compose --debug run "$FINALE_SERVICE_NAME" -i base --stop-after-init --no-http
|
||||
|
||||
echo "Model database in final Odoo version created."
|
||||
log_info "Model database in final Odoo version created."
|
||||
|
||||
############################
|
||||
# COPY ORIGINAL COMPONENTS #
|
||||
############################
|
||||
log_step "COPY ORIGINAL COMPONENTS"
|
||||
|
||||
echo "
|
||||
==== COPY ORIGINAL COMPONENTS ===="
|
||||
echo "UPGRADE: Start copy"
|
||||
copy_database "$ORIGIN_DB_NAME" "$COPY_DB_NAME" "$COPY_DB_NAME"
|
||||
log_info "Original database copied to ${COPY_DB_NAME}@${COPY_DB_NAME}."
|
||||
|
||||
# Copy database
|
||||
copy_database "$ORIGIN_DB_NAME" "$COPY_DB_NAME" "$COPY_DB_NAME" || exit 1
|
||||
echo "UPGRADE: original database copied in ${COPY_DB_NAME}@${COPY_DB_NAME}."
|
||||
|
||||
# Copy filestore
|
||||
copy_filestore "$ORIGIN_SERVICE_NAME" "$ORIGIN_DB_NAME" "$COPY_DB_NAME" "$COPY_DB_NAME" || exit 1
|
||||
echo "UPGRADE: original filestore copied."
|
||||
copy_filestore "$ORIGIN_SERVICE_NAME" "$ORIGIN_DB_NAME" "$COPY_DB_NAME" "$COPY_DB_NAME"
|
||||
log_info "Original filestore copied."
|
||||
|
||||
|
||||
#####################
|
||||
# PATH OF MIGRATION #
|
||||
####################
|
||||
log_step "PATH OF MIGRATION"
|
||||
|
||||
echo "
|
||||
==== PATH OF MIGRATION ===="
|
||||
# List all the versions to migrate through
|
||||
declare -a versions
|
||||
nb_migrations=$(($FINAL_VERSION - $ORIGIN_VERSION))
|
||||
nb_migrations=$((FINAL_VERSION - ORIGIN_VERSION))
|
||||
|
||||
# Build the migration path
|
||||
for ((i = 0; i<$nb_migrations; i++))
|
||||
do
|
||||
versions[$i]=$(($ORIGIN_VERSION + 1 + i))
|
||||
for ((i = 0; i < nb_migrations; i++)); do
|
||||
versions[i]=$((ORIGIN_VERSION + 1 + i))
|
||||
done
|
||||
echo "UPGRADE: Migration path is ${versions[@]}"
|
||||
log_info "Migration path is ${versions[*]}"
|
||||
|
||||
|
||||
########################
|
||||
# DATABASE PREPARATION #
|
||||
########################
|
||||
log_step "DATABASE PREPARATION"
|
||||
|
||||
echo "
|
||||
==== DATABASE PREPARATION ===="
|
||||
|
||||
./prepare_db.sh "$COPY_DB_NAME" "$COPY_DB_NAME" "$FINALE_DB_MODEL_NAME" "$FINALE_SERVICE_NAME" || exit 1
|
||||
./prepare_db.sh "$COPY_DB_NAME" "$COPY_DB_NAME" "$FINALE_DB_MODEL_NAME" "$FINALE_SERVICE_NAME"
|
||||
|
||||
|
||||
###################
|
||||
# UPGRADE PROCESS #
|
||||
###################
|
||||
log_step "UPGRADE PROCESS"
|
||||
|
||||
for version in "${versions[@]}"
|
||||
do
|
||||
echo "START UPGRADE TO ${version}.0"
|
||||
start_version=$((version-1))
|
||||
end_version="$version"
|
||||
for version in "${versions[@]}"; do
|
||||
log_info "START UPGRADE TO ${version}.0"
|
||||
|
||||
### Go to the repository holding the upgrate scripts
|
||||
cd "${end_version}.0"
|
||||
cd "${version}.0"
|
||||
|
||||
### Execute pre_upgrade scripts
|
||||
./pre_upgrade.sh || exit 1
|
||||
./pre_upgrade.sh
|
||||
./upgrade.sh
|
||||
./post_upgrade.sh
|
||||
|
||||
### Start upgrade
|
||||
./upgrade.sh || exit 1
|
||||
|
||||
### Execute post-upgrade scripts
|
||||
./post_upgrade.sh || exit 1
|
||||
|
||||
### Return to parent repository for the following steps
|
||||
cd ..
|
||||
echo "END UPGRADE TO ${version}.0"
|
||||
log_info "END UPGRADE TO ${version}.0"
|
||||
done
|
||||
## END UPGRADE LOOP
|
||||
|
||||
##########################
|
||||
# POST-UPGRADE PROCESSES #
|
||||
##########################
|
||||
./finalize_db.sh "$FINALE_DB_NAME" "$FINALE_SERVICE_NAME" || exit 1
|
||||
log_step "POST-UPGRADE PROCESSES"
|
||||
|
||||
./finalize_db.sh "$FINALE_DB_NAME" "$FINALE_SERVICE_NAME"
|
||||
|
||||
echo "UPGRADE PROCESS ENDED WITH SUCCESS"
|
||||
log_step "UPGRADE PROCESS ENDED WITH SUCCESS"
|
||||
|
||||
Reference in New Issue
Block a user