-
-
Save nvn-odoo/1afc153596ff801b33afe15106833e0d to your computer and use it in GitHub Desktop.
Upload your database on upgrade.odoo.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
command -v curl >/dev/null 2>&1 || { echo >&2 "I require curl but it's not installed. Aborting."; exit 1; } | |
command -v jq >/dev/null 2>&1 || { echo >&2 "I require jq but it's not installed. Aborting."; exit 1; } | |
MAX_CMD_TRIES=100 | |
BASE_WORK_DIR=${HOME}/odoo_upgrade | |
if [ ! -d "$BASE_WORK_DIR" ]; then | |
mkdir "$BASE_WORK_DIR" | |
fi | |
if [ "$BASE_URL" = "" ]; then | |
BASE_URL="https://upgrade.odoo.com" | |
else | |
CURL_OPTS="-k" | |
fi | |
if [ "$CONTRACT" = "" ]; then | |
echo "Missing parameter: CONTRACT" >&2 | |
exit 1 | |
fi | |
if [ "$EMAIL" = "" ]; then | |
echo "Missing parameter: EMAIL" >&2 | |
exit 1 | |
fi | |
if [ "$AIM" = "" ]; then | |
echo "Missing parameter: AIM" >&2 | |
exit 1 | |
fi | |
if [ "$TARGET" = "" ]; then | |
echo "Missing parameter: TARGET" >&2 | |
exit 1 | |
fi | |
if [ "$DUMP" = "" ]; then | |
echo "Missing parameter: DUMP" >&2 | |
exit 1 | |
fi | |
DB=$(basename "$DUMP") | |
WORK_DIR=${BASE_WORK_DIR}/${DB:?} | |
if [ ! -d "$WORK_DIR" ]; then | |
mkdir "$WORK_DIR" | |
fi | |
if [ "$SSH_KEYS" = "" ]; then | |
SSH_KEYS=${HOME}/.ssh/id_rsa.pub | |
fi | |
echo "Using '$SSH_KEYS' as SSH keys" | |
if [ ! -f "$DUMP" ]; then | |
echo "dump file '$DUMP' does not exist. Aborting" >&2 | |
exit 2 | |
fi | |
if [ ! -f "$SSH_KEYS" ]; then | |
echo "ssh key file '$SSH_KEYS' does not exist. Aborting" >&2 | |
exit 2 | |
fi | |
# check public key file is valid: | |
ssh-keygen -l -f "$SSH_KEYS" 1>/dev/null | |
CREATE_URL="${BASE_URL}/database/v1/create" | |
URL_PARAMS="contract=${CONTRACT}&aim=${AIM}&target=${TARGET}&email=${EMAIL}&filename=${DUMP}" | |
counter=$MAX_CMD_TRIES | |
while true; | |
do | |
echo "Creating the request" | |
curl $CURL_OPTS -sS "${CREATE_URL}?${URL_PARAMS}" > "${WORK_DIR}/create_result.json" | |
failures=$(cat "${WORK_DIR}/create_result.json" | jq -r '.failures[]') | |
if [ "$failures" != "" ]; then | |
echo $failures | jq -r '.' | |
if [ "$counter" -le "0" ]; then | |
echo "Tried too many times. Exiting" | |
exit 4 | |
fi | |
echo "trying again (# of tries left: $counter)"; | |
sleep 3 | |
counter=$((counter-1)); | |
else | |
KEY=$(cat "${WORK_DIR}/create_result.json" | jq -r '.request.key') | |
REQUEST_ID=$(cat "${WORK_DIR}/create_result.json" | jq -r '.request.id') | |
echo "created request #${REQUEST_ID}" | |
echo "create: ok" | |
break | |
fi | |
done | |
# Requesting an SFTP access: | |
REQUEST_SFTP_ACCESS_URL="${BASE_URL}/database/v1/request_sftp_access" | |
URL_PARAMS="key=${KEY}&request=${REQUEST_ID}" | |
counter=$MAX_CMD_TRIES | |
while true; | |
do | |
echo "Requesting SFTP access" | |
curl $CURL_OPTS -sS "${REQUEST_SFTP_ACCESS_URL}?${URL_PARAMS}" -F ssh_keys=@"${SSH_KEYS}" > "${WORK_DIR}/request_sftp_result.json" | |
failures=$(cat "${WORK_DIR}/request_sftp_result.json" | jq -r '.failures[]') | |
if [ "$failures" != "" ]; then | |
echo $failures | jq -r '.' | |
if [ "$counter" -le "0" ]; then | |
echo "Tried too many times. Exiting" | |
exit 4 | |
fi | |
echo "trying again (# of tries left: $counter)"; | |
sleep 3 | |
counter=$((counter-1)); | |
else | |
echo "request_sftp_access: ok" | |
break | |
fi | |
done | |
# Uploading the dump file: | |
SSH_OPTIONS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" | |
SFTP_PORT=$(cat "${WORK_DIR}/request_sftp_result.json" | jq -r '.request.sftp_port') | |
SFTP_USER=$(cat "${WORK_DIR}/request_sftp_result.json" | jq -r '.request.sftp_user') | |
SFTP_SERVER=$(cat "${WORK_DIR}/request_sftp_result.json" | jq -r '.request.hostname') | |
SFTP_FILENAME=$(cat "${WORK_DIR}/request_sftp_result.json" | jq -r '.request.shared_file') | |
SFTP_CMD="sftp -b ${WORK_DIR}/batch.sftp -P ${SFTP_PORT} ${SSH_OPTIONS} ${SFTP_USER}@${SFTP_SERVER}" | |
echo "put -a \"$DUMP\" \"$SFTP_FILENAME\"" > "${WORK_DIR}/batch.sftp" | |
echo "bye" >> "${WORK_DIR}/batch.sftp" | |
echo "Uploading dump file using:" | |
echo " $SFTP_CMD" | |
counter=$MAX_CMD_TRIES | |
until $SFTP_CMD | |
do | |
if [ "$counter" -le "0" ]; then | |
echo "Tried too many times. Exiting" | |
exit 4 | |
fi | |
echo "trying again (# of tries left: $counter)"; | |
sleep 3 | |
counter=$((counter-1)); | |
done | |
if [ "$NO_PROCESS" != "" ]; then | |
echo "no process -> exiting" | |
echo "request id: ${REQUEST_ID}" | |
exit 0 | |
fi | |
# Asking to process the database | |
PROCESS_URL="${BASE_URL}/database/v1/process" | |
URL_PARAMS="key=${KEY}&request=${REQUEST_ID}" | |
counter=$MAX_CMD_TRIES | |
while true; | |
do | |
echo "Asking to process the request" | |
curl $CURL_OPTS -sS "${PROCESS_URL}?${URL_PARAMS}" > "${WORK_DIR}/process_result.json" | |
failures=$(cat "${WORK_DIR}/process_result.json" | jq -r '.failures[]') | |
if [ "$failures" != "" ]; then | |
echo $failures | jq -r '.' | |
if [ "$counter" -le "0" ]; then | |
echo "Tried too many times. Exiting" | |
exit 4 | |
fi | |
echo "trying again (# of tries left: $counter)"; | |
sleep 3 | |
counter=$((counter-1)); | |
else | |
echo "ask to process: ok" | |
break | |
fi | |
done | |
echo | |
echo "command to periodicaly check the upgrade request status:" | |
key=$(cat ${WORK_DIR}/create_result.json | jq -r '.request.key') | |
request=$(cat ${WORK_DIR}/create_result.json | jq -r '.request.id') | |
echo "curl $CURL_OPTS -Ss \"${BASE_URL}/database/v1/status?key=${key}&request=${request}\" | jq -r '.request.state'" | |
echo | |
echo "alternatively, you can connect to this status page and periodicaly refresh the page:" | |
cat ${WORK_DIR}/create_result.json | jq -r '.request.status_url' | |
echo | |
echo "once 'done', download the upgraded dump with:" | |
echo "wget \"$(cat ${WORK_DIR}/create_result.json | jq -r '.request.upgraded_dump_url')\" --continue --tries=0 -O \"upgraded_$(echo $DB | sed 's/.dump/.zip/g')\"" | |
echo | |
echo "You can get the complete status info with:" | |
echo "cat ${WORK_DIR}/create_result.json | jq -r '.request'" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment