Введение
В этом документе описан API, используемый для обновления базы данных Odoo до более высокой версии.
Он позволяет обновить базу данных без повторной отправки html-формы на https://upgrade.odoo.com Хотя база данных будет следовать тому же процессу, который описан в этой форме.
Требуемые шаги:
Методы
Создание запроса на обновление базы данных
Это действие создает запрос базы данных со следующей информацией:
- Ссылка на ваш контракт
- Ваш адрес электронной почты
- Целевую версию (версию Odoo, до которой вы хотите обновить)
- Цель вашего запроса (для теста или реальная эксплуатация)
- Имя дампа базы данных (обязательное, но чисто для информации)
- необязательный параметр - часовой пояс сервера (для версии Odoo <6.1)
Метод create
https://upgrade.odoo.com/database/v1/create
Создает запрос на обновление базы данных
- contract (
str
) – (обязательный параметр) ссылка на ваш контракт enterprise версии - email (
str
) – (обязательный параметр) ваш адрес электронной почты - target (
str
) – (required) the Odoo version you want to upgrade to. Valid choices: 11.0, 12.0, 13.0 - aim (
str
) – (обязательный параметр) цель вашего запроса обновления базы данных . Доступные значения: тест, реальная эксплуатация. - filename (
str
) – (обязательный параметр) имя дампа базы данных , носит информационный характер - timezone (
str
) – (необязательный параметр) часовой пояс, используемый вашим сервером. Только для версии Odoo <6.1
Метод create возвращает словарь JSON, содержащий следующие ключи:
failures
Список ошибок.
Список словарей, каждый из которых содержит информацию об одной конкретной ошибке. Каждый словарь может содержать различные ключи в зависимости от типа ошибки, но вы всегда получите ключи reason
и message
:
reason
: тип ошибкиmessage
: понятное человеку сообщение
Некоторые возможные ключи:
code
: ошибочное значениеvalue
: ошибочное значениеexpected
: список допустимых значений
См. Пример вывода.
- JSON
{
"failures": [
{
"expected": [
"11.0",
"12.0",
"13.0",
],
"message": "Invalid value \"5.0\"",
"reason": "TARGET:INVALID",
"value": "5.0"
},
{
"code": "M123456-abcxyz",
"message": "Can not find contract M123456-abcxyz",
"reason": "CONTRACT:NOT_FOUND"
}
]
}
request
Если вызов метода create будет успешным, значение, связанное с ключом request, будет словарем, содержащим различную информацию о созданном запросе:
Наиболее важные ключи:
id
: id запросаkey
: ваш личный ключ для этого запроса
Эти 2 значения будут запрошены другими методами (upload, process и status)
Другие ключи будут объяснены в разделе, описывающем status method.
Пример скрипта
Вот два примера создания запроса на обновление базы данных с использованием:
- one in the python programming language using the requests library
- one in the bash programming language using curl (tool for transfering data using http) and jq (JSON processor):
- Python 2
- Bash
import requests
CREATE_URL = "https://upgrade.odoo.com/database/v1/create"
CONTRACT = "M123456-abcdef"
AIM = "test"
TARGET = "12.0"
EMAIL = "john.doe@example.com"
FILENAME = "db_name.dump"
fields = dict([
('aim', AIM),
('email', EMAIL),
('filename', DB_SOURCE),
('contract', CONTRACT),
('target', TARGET),
])
r = requests.get(CREATE_URL, data=fields)
print(r.text)
CONTRACT=M123456-abcdef
AIM=test
TARGET=12.0
EMAIL=john.doe@example.com
FILENAME=db_name.dump
CREATE_URL="https://upgrade.odoo.com/database/v1/create"
URL_PARAMS="contract=${CONTRACT}&aim=${AIM}&target=${TARGET}&email=${EMAIL}&filename=${FILENAME}"
curl -sS "${CREATE_URL}?${URL_PARAMS}" > create_result.json
# check for failures
failures=$(cat create_result.json | jq -r '.failures[]')
if [ "$failures" != "" ]; then
echo $failures | jq -r '.'
exit 1
fi
Загрузка дампа базы данных
Существует два метода загрузки дампа базы данных:
- метод
upload
с использованием протокола HTTPS - метод `` request_sftp_access`` с использованием протокола SFTP
Метод `` upload``
Это самый простой и самый правильный способ загрузки дампа базы данных. Он использует протокол HTTPS.
https://upgrade.odoo.com/database/v1/upload
Загружает дамп базы данных
Идентификатор запроса и закрытый ключ получают с помощью метод create
Результатом является словарь JSON, содержащий список failures
, который должен быть пустым, если все прошло нормально.
- Python 2
- Bash
import requests
UPLOAD_URL = "https://upgrade.odoo.com/database/v1/upload"
DUMPFILE = "/tmp/dump.sql"
fields = dict([
('request', '10534'),
('key', 'Aw7pItGVKFuZ_FOR3U8VFQ=='),
])
headers = {"Content-Type": "application/octet-stream"}
with open(DUMPFILE, 'rb') as f:
requests.post(UPLOAD_URL, data=f, params=fields, headers=headers)
UPLOAD_URL="https://upgrade.odoo.com/database/v1/upload"
DUMPFILE="openchs.70.cdump"
KEY="Aw7pItGVKFuZ_FOR3U8VFQ=="
REQUEST_ID="10534"
URL_PARAMS="key=${KEY}&request=${REQUEST_ID}"
HEADER="Content-Type: application/octet-stream"
curl -H $HEADER --data-binary "@${DUMPFILE}" "${UPLOAD_URL}?${URL_PARAMS}"
Метод request_sftp_access
Этот метод рекомендуется для больших дампов базы данных. Он использует протокол SFTP и поддерживает возобновление.
Он создаст временный SFTP-сервер, к которому вы можете подключиться, и позволит вам загружать дамп базы данных с помощью SFTP-клиента.
https://upgrade.odoo.com/database/v1/request_sftp_access
Создает SFTP-сервер
Идентификатор запроса и закрытый ключ получают с помощью метод create
Файл с открытыми ключами ssh должен быть примерно похож на стандартный файл authorized_keys
. Этот файл должен содержать только открытые ключи, пустые строки или комментарии (строки, начинающиеся с символа #
),
Ваш запрос на обновление базы данных должен находиться в состоянии draft
.
Метод request_sftp_access
возвращает словарь JSON, содержащий следующие ключи:
- Python 2
- Bash
import requests
UPLOAD_URL = "https://upgrade.odoo.com/database/v1/request_sftp_access"
SSH_KEY = "$HOME/.ssh/id_rsa.pub"
SSH_KEY_CONTENT = open(SSH_KEY,'r').read()
fields = dict([
('request', '10534'),
('key', 'Aw7pItGVKFuZ_FOR3U8VFQ=='),
('ssh_keys', SSH_KEY_CONTENT)
])
r = requests.post(UPLOAD_URL, params=fields)
print(r.text)
REQUEST_SFTP_ACCESS_URL="https://upgrade.odoo.com/database/v1/request_sftp_access"
SSH_KEYS=/path/to/your/authorized_keys
KEY="Aw7pItGVKFuZ_FOR3U8VFQ=="
REQUEST_ID="10534"
URL_PARAMS="key=${KEY}&request=${REQUEST_ID}"
curl -sS "${REQUEST_SFTP_ACCESS_URL}?${URL_PARAMS}" -F ssh_keys=@${SSH_KEYS} > request_sftp_result.json
# check for failures
failures=$(cat request_sftp_result.json | jq -r '.failures[]')
if [ "$failures" != "" ]; then
echo $failures | jq -r '.'
exit 1
fi
failures
Список ошибок. Смотрите failures для объяснения словаря JSON, возвращенного в случае сбоя.
request
Если вызов выполнен успешно, значение, связанное с ключом request, будет словарем, содержащим параметры подключения SFTP:
hostname
: адрес хоста для соединенияsftp_port
: порт для подключенияsftp_user
: пользователь SFTP, который будет использоваться для подключенияshared_file
: имя файла, которое вы должны использовать (идентичное значениюfilename
, которое вы использовали при создании запроса в метод create).)request_id
: соответствующий id запроса обновления (только информативный, не требуемый для подключения)sample_command
: пример команды с использованием клиента sftp
Обычно вы можете подключиться с использованием команды sample как есть.
У вас будет доступ только к shared_file
. Никакие другие файлы не будут доступны, и вы не сможете создавать новые файлы в общей среде на сервере SFTP.
Использование клиента sftp
После успешного подключения с использованием SFTP-клиента вы можете загрузить дамп базы данных. Ниже приведен пример сеанса с использованием клиента sftp:
$ sftp -P 2200 user_10534@upgrade.odoo.com
Connected to upgrade.odoo.com.
sftp> put /path/to/openchs.70.cdump openchs.70.cdump
Uploading /path/to/openchs.70.cdump to /openchs.70.cdump
sftp> ls -l openchs.70.cdump
-rw-rw-rw- 0 0 0 849920 Aug 30 15:58 openchs.70.cdump
Если ваше соединение прервано, вы можете продолжить передачу файла, используя ключ командной строки -a
:
sftp> put -a /path/to/openchs.70.cdump openchs.70.cdump
Resuming upload of /path/to/openchs.70.cdump to /openchs.70.cdump
Если вы не хотите вводить команду вручную и вам необходимо автоматизировать обновление базы данных с помощью скрипта, вы можете использовать пакетный файл или передать команды в sftp:
echo "put /path/to/openchs.70.cdump openchs.70.cdump" | sftp -b - -P 2200 user_10534@upgrade.odoo.com
Параметр -b
принимает имя файла. Если имя файла -
, оно читает команды со стандартного ввода.
Запрос на обработку вашего запроса
Это действие просит платформу обновления обработать дамп базы данных.
Метод process
https://upgrade.odoo.com/database/v1/process
Обработка дампа базы данных
Идентификатор запроса и закрытый ключ получают с помощью метод create
Результатом является словарь JSON, содержащий список failures
, который должен быть пустым, если все прошло нормально.
- Python 2
- Bash
import requests
PROCESS_URL = "https://upgrade.odoo.com/database/v1/process"
fields = dict([
('request', '10534'),
('key', 'Aw7pItGVKFuZ_FOR3U8VFQ=='),
])
r = requests.get(PROCESS_URL, data=fields)
print(r.text)
PROCESS_URL="https://upgrade.odoo.com/database/v1/process"
KEY="Aw7pItGVKFuZ_FOR3U8VFQ=="
REQUEST_ID="10534"
URL_PARAMS="key=${KEY}&request=${REQUEST_ID}"
curl -sS "${PROCESS_URL}?${URL_PARAMS}"
Asking to skip the tests
This action asks the Upgrade Platform to skip the tests for your request. If you don’t want Odoo to test and validate the migration, you can bypass the testing stage and directly get the migrated dump.
The skip_test
method
https://upgrade.odoo.com/database/v1/skip_test
Skip the tests, deliver the upgraded dump, and set the state to „delivered“
Идентификатор запроса и закрытый ключ получают с помощью метод create
Результатом является словарь JSON, содержащий список failures
, который должен быть пустым, если все прошло нормально.
- Python 2
- Bash
import requests
PROCESS_URL = "https://upgrade.odoo.com/database/v1/skip_test"
fields = dict([
('request', '10534'),
('key', 'Aw7pItGVKFuZ_FOR3U8VFQ=='),
])
r = requests.get(PROCESS_URL, data=fields)
print(r.text)
PROCESS_URL="https://upgrade.odoo.com/database/v1/skip_test"
KEY="Aw7pItGVKFuZ_FOR3U8VFQ=="
REQUEST_ID="10534"
URL_PARAMS="key=${KEY}&request=${REQUEST_ID}"
curl -sS "${PROCESS_URL}?${URL_PARAMS}"
Получение статуса запроса
Это действие запрашивает статус вашего запроса на обновление базы данных.
Метод status
https://upgrade.odoo.com/database/v1/status
Запросить статус запроса на обновление базы данных
Идентификатор запроса и закрытый ключ получают с помощью метод create
Результатом является словарь JSON, содержащий различную информацию о вашем запросе на обновление базы данных.
- Python 2
- Bash
import requests
PROCESS_URL = "https://upgrade.odoo.com/database/v1/status"
fields = dict([
('request', '10534'),
('key', 'Aw7pItGVKFuZ_FOR3U8VFQ=='),
])
r = requests.get(PROCESS_URL, data=fields)
print(r.text)
STATUS_URL="https://upgrade.odoo.com/database/v1/status"
KEY="Aw7pItGVKFuZ_FOR3U8VFQ=="
REQUEST_ID="10534"
URL_PARAMS="key=${KEY}&request=${REQUEST_ID}"
curl -sS "${STATUS_URL}?${URL_PARAMS}"
Пример вывода
Ключ request
содержит различную полезную информацию о вашем запросе:
id
- ID запроса
key
- Ваш личный ключ
email
- Адрес электронной почты, который вы указали при создании запроса
target
- Целевая версия Odoo, которую вы указали при создании запроса
aim
- Цель (тест, реальное использование) запроса на обновление базы данных, которую вы указали при создании запроса
filename
- Имя файла, которое вы указали при создании запроса
timezone
- Часовой пояс, который вы указали при создании запроса
state
- Состояние вашего запроса
issue_stage
- Этап ишью, которую мы создали на главном сервере Odoo
issue
- id ишью, которую мы создали на главном сервере Odoo
status_url
- URL-адрес для доступа к html-странице запроса на обновление базы данных
notes_url
- URL-адрес для получения заметок об обновлении базы данных
original_sql_url
- URL-адрес, используемый для получения загруженной (не обновленной) базы данных в виде потока SQL
original_dump_url
- URL-адрес, используемый для получения загруженной (не обновленной) базы данных в виде файла архива
upgraded_sql_url
- URL-адрес, используемый для получения обновленной базы данных в виде потока SQL
upgraded_dump_url
- URL-адрес, используемый для получения обновленной базы данных в виде файла архива
modules_url
- URL-адрес, используемый для получения кастомных модулей
filesize
- Размер файла загруженной базы данных
database_uuid
- Уникальный идентификатор вашей базы данных
created_at
- Дата создания запроса
estimated_time
- Оценка времени, необходимого для обновления базы данных
processed_at
- Время начала обновления базы данных
elapsed
- Время, необходимое для обновления базы данных
filestore
- Ваши вложения были преобразованы в файл-архив
customer_message
- Важное сообщение, связанное с вашим запросом
database_version
- предполагаемая версия Одо вашей загруженной (не обновленной) базы данных
postgresql
- предполагаемая версия Postgresql загруженной (не обновленной) базы данных
compressions
- Методы сжатия, используемые вашей загруженной базой данных
- JSON
{
"failures": [],
"request": {
"id": 10534,
"key": "Aw7pItGVKFuZ_FOR3U8VFQ==",
"email": "john.doe@example.com",
"target": "12.0",
"aim": "test",
"filename": "db_name.dump",
"timezone": null,
"state": "draft",
"issue_stage": "new",
"issue": 648398,
"status_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/status",
"notes_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/upgraded/notes",
"original_sql_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/original/sql",
"original_dump_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/original/archive",
"upgraded_sql_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/upgraded/sql",
"upgraded_dump_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/upgraded/archive",
"modules_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/modules/archive",
"filesize": "912.99 Kb",
"database_uuid": null,
"created_at": "2018-09-09 07:13:49",
"estimated_time": null,
"processed_at": null,
"elapsed": "00:00",
"filestore": false,
"customer_message": null,
"database_version": null,
"postgresql": "9.4",
"compressions": [
"pgdmp_custom",
"sql"
]
}
}
Загрузка дампа базы данных
Помимо загрузки перенесенной базы данных с использованием URL-адреса, предоставленного с помощью status method, вы также можете использовать протокол SFTP, как описано в методе request_sftp_access method
Разница заключается в том, что вы сможете загружать только перенесенную базу данных. Загрузка не будет возможна.
Запрос на обновление базы данных должен находиться в состоянии done
.
После успешного подключения с использованием SFTP-клиента вы можете загрузить дамп базы данных. Ниже приведен пример сеанса с использованием клиента sftp:
$ sftp -P 2200 user_10534@upgrade.odoo.com
Connected to upgrade.odoo.com.
sftp> get upgraded_openchs.70.cdump /path/to/upgraded_openchs.70.cdump
Downloading /upgraded_openchs.70.cdump to /path/to/upgraded_openchs.70.cdump